在我的xaml中我必须将10个项目定义为:
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1">
<TextBox Width="100"
DataContext="{StaticResource dataProvider}"
Text="{Binding XPath='BLOCK[@id=2]/ITEMS/ITEM[@id=1]/@value'}"/>
<ComboBox Margin="5"
DataContext="{StaticResource dataProvider}"
SelectedValuePath="Tag"
SelectedValue="{Binding XPath='BLOCK[@id=2]/ITEMS/ITEM[@id=2]/@value'}">
<ComboBoxItem Content="GROUP" Tag="6" />
<ComboBoxItem Content="PRIVATE" Tag="5" />
</ComboBox>
<TextBox Width="200"
DataContext="{StaticResource dataProvider}"
Text="{Binding XPath='BLOCK[@id=2]/ITEMS/ITEM[@id=4]/@value'}"/>
</StackPanel>
所以,我没有多次重复,而是想使用像这样的ControlTemplate:
<DataTemplate.Resources>
<ControlTemplate x:Key="AddressItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBox Name="Address" Width="200"/>
<ComboBox Name="Type">
<ComboBoxItem Content="GROUP" Tag="6" />
<ComboBoxItem Content="PRIVATE" Tag="5" />
</ComboBox>
<TextBox Name="Description" Width="200"/>
</StackPanel>
</ControlTemplate>
</DataTemplate.Resources>
现在当我使用它时......
<Control Grid.Row="0" Grid.Column="1" Template="{StaticResource AddressItemTemplate}" />
<Control Grid.Row="1" Grid.Column="1" Template="{StaticResource AddressItemTemplate}" />
<Control Grid.Row="2" Grid.Column="1" Template="{StaticResource AddressItemTemplate}" />
..由于XPath绑定属性对于每个项目都不同(ITEM [@Id]总是更改),我需要一种方法来在创建'时访问TextBox.Text,ComboBox.SelectedValuePath和ComboBox.SelectedValue属性控制”。
有办法吗?
答案 0 :(得分:0)
这是WPF中一个非常常见的问题。如果您将Control
control
命名为:
TextBox textBox = (TextBox)control.Template.FindName("Address", control);
ComboBox comboBox = (ComboBox)control.Template.FindName("Type", control);
我相信你可以为自己完成剩下的工作。