访问xaml中ControlTemplate中定义的元素的属性

时间:2013-09-04 12:27:12

标签: c# wpf xaml

在我的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属性控制”。

有办法吗?

1 个答案:

答案 0 :(得分:0)

这是WPF中一个非常常见的问题。如果您将Control control命名为:

,则可以访问这些元素
TextBox textBox = (TextBox)control.Template.FindName("Address", control);

ComboBox comboBox = (ComboBox)control.Template.FindName("Type", control);

我相信你可以为自己完成剩下的工作。