2012-07-11 27 views
1

在我的WPF应用程序中,我有一个位于网格控件内的ComboBox控件。在XAML我分配一个名称到ComboBox:从具有标识名称的DataTemplate中访问控件

<DataGridTemplateColumn Header="Status"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock VerticalAlignment="Center" Text="{Binding name_ru}" Width="Auto" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox Name="stcom" Style="{DynamicResource ComboBoxStyle}" SelectionChanged="status_SelectionChanged" Height="auto" Width="Auto"> 
       <ComboBox.BorderBrush> 
        <SolidColorBrush Color="{DynamicResource Color1}"/> 
       </ComboBox.BorderBrush> 
      </ComboBox> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

随着方法FindName(串),我想指的是组合框及其相关的名称:

ComboBox stcom 
     { 
      get 
      { 
       return (ComboBox)FindName("stcom"); 
      } 
     } 


if (stcom != null) 
      { 
       stcom.ItemsSource = list; 
      } 

但很明显的控制能未找到,因为参考stcom保留为空。

现在的问题是如何引用我的ComboBox使用其名称属性?

+0

好'FindName(“stcom”)'这不工作,我认为不在网格的控件。 – V4Vendetta 2012-07-11 08:44:54

+0

如果您使用Expander可以看看http://stackoverflow.com/questions/26422811/accessing-the-children-of-an-expander-control/42381746#42381746 – 2017-02-22 02:51:25

回答

2

答案是:

<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type CheckBox}"> 
    <StackPanel Orientation="Horizontal"> 
     <Grid> 
     <TextBlock Name="tbUserIcon" Text="t1" /> 
     <TextBlock Name="tbCheck" Text="✓" /> 
     </Grid> 
    </StackPanel> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

和C#:

checkBox.ApplyTemplate(); 
var tbUserIcon= (TextBlock)checkBox.Template.FindName("tbUserIcon", checkBox); 

不要忘记复选框.ApplyTemplate()放在Template.FindName()之前,这很重要!

相关问题