2

在我的 WPF 应用程序中,我有一个位于网格控件内的 ComboBox 控件。在 XAML 中,我为 ComboBox 分配了一个名称:

<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(string) 方法,我尝试使用关联名称来引用 ComboBox:

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


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

但显然无法找到控件,因为引用stcom仍然为空。

现在的问题是如何使用它的 name 属性来引用我的 ComboBox ?

4

3 回答 3

3

答案是:

<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);

不要忘记 checkBox.ApplyTemplate() 在 Template.FindName() 之前,这很重要!

于 2015-06-10T18:21:00.500 回答
2

首先,您必须访问已应用它的控件模板,然后您可以通过名称找到模板的元素。看看 MSDN 知识库:

于 2012-07-11T08:52:43.293 回答
0

您不能使用名称访问属于 DataTemplate 的控件。

您可以尝试阅读一些解决方法,例如

例如,您还可以查看有关 SO 发布此主题的数十篇帖子

于 2012-07-11T08:49:57.520 回答