2012-07-11 47 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()之前,這很重要!

相關問題