這可能很明顯......我如何在同一個XAML文件中引用XAML元素?如何引用Grid.Row/Grid.Column中的行/列定義?
實施例:
<Grid.RowDefinitions>
<RowDefinition Height="661*" Name="someGridRow" />
<RowDefinition Height="230*" Name="someOtherGridRow"/>
</Grid.RowDefinitions>
然後我定義網格內的各種控制,我想通過名稱來引用這些行,而不是由數:
<RichTextBox Grid.Row="someGridRow" ... />
因爲如果我上使用Grid.Row="0"
很多控件,那麼當我在第一行之前添加一行時,我必須手工更改所有對Grid.Row="1"
的引用。
謝謝。
編輯:
感謝我一直在閱讀上XAML一點答案。
畢竟,它可以通過名字顯然是引用前一個元素:
Grid.Row="{Binding ElementName=someGridRow}"
或
Grid.Row="{x:Reference someGridRow}"
但這並不解決問題完全是因爲Grid.Row需要一個int ,而someGridRow不是一個int,它是一個System.Windows.Controls.RowDefinition。
那麼,什麼是需要的是XAML相當於
Grid.Row = grid.RowDefinitions.IndexOf(someGridRow)
這在後面的代碼將被寫入
Grid.SetRow(richTextBox, grid.RowDefinitions.IndexOf(someGridRow))
或做Grid.Row
的綁定屬性,對象grid
,在這具有參數someGridRow
的路徑"RowDefinitions.IndexOf"
:
PropertyPath path = new PropertyPath("RowDefinitions.IndexOf", someGridRow);
Binding binding = new Binding() { ElementName = "grid", Path = path };
richTextBox.SetBinding(Grid.RowProperty, binding);
(這其實並不在C#中工作,所以我一定是做錯了什麼,雖然上述Grid.SetRow
不工作)
XAML 2009年定義<x:Arguments>
調用一個帶有參數的構造函數。如果這在WPF XAML中起作用,那麼類似這樣的事情我會想辦法嗎?
<Grid.Row>
<Binding ElementName="grid">
<Binding.Path>
<PropertyPath>
<x:Arguments>
RowDefinitions.IndexOf
<Binding ElementName="someGridRow"/>
</x:Arguments>
</PropertyPath>
</Binding.Path>
</Binding>
</Grid.Row>
其中<Binding ElementName="someGridRow"/>
也可以通過<x:Reference Name="someGridRow"/>
在2009年
我想所有的,將永遠作爲屬性路徑工作,不允許像'IndexOf'方法調用。 –
好吧我放棄了... – SemMike