XAML中的可见名称

时间:2012-07-10 13:38:16

标签: c# wpf xaml

我有一个包含ComboBox列的数据网格。我为我的组合框设置了Name,但这个名字在代码中不可见,为什么?

<DataGrid ...>
    <DataGrid.Columns>
        <DataGrid.TemplateColumn>
             <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox Name="mex" Style="{DynamicResource ComboBoxStyle}"
                              ItemsSource="{Binding Path=combolist}"
                              SelectionChanged="status_SelectionChanged" Height="auto" Width="Auto">
                    </ComboBox>
                </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
        </DataGrid.TemplateColumn>
        ...
    </DataGrid.Columns>
</DataGrid>

在C#中代码mex是空的,不可见,为什么?

我也试过了x:Name="mex",但它仍然不可见。

C#:

mex.ItemsSource = dt;

unifined mex

3 个答案:

答案 0 :(得分:3)

DataGridColumn实际上从不在逻辑或可视树中;它始终是DataGridRow DataGridCells,因为它们会自动为DataGrid中的每一行创建。

到达组件的唯一方法是构建复杂的Binding或使用Logical或Visual Tree帮助程序找到它。

顺便说一下,您应该将ItemsSourceComboBox的{​​{1}}设置为您行中的可用数据。您无法在Bindings内使用ElementName创建绑定,因为它不在逻辑树或可视树中。

我发现了一个有趣的链接,解释了DataGrid的Visual Tree:http://blogs.msdn.com/b/vinsibal/archive/2008/08/14/wpf-datagrid-dissecting-the-visual-layout.aspx

答案 1 :(得分:0)

当元素存储在项目模板中时,您无法直接引用元素。通常,您希望允许viewmodel通过将datacontext设置为父对象来处理绑定,然后允许items模板中的元素选择它。但是,根据您的问题,看起来好像是在尝试直接从后面的代码执行此操作。

以下是两个类似的问题和解决方案,用于设置项目的datacontext以及引用项目模板中的元素。希望这有帮助

Access parent DataContext from DataTemplate

WPF - ItemsControl - How do I get find my "CheckBox" item that is in the ItemTemplate?

答案 2 :(得分:0)

因为所有行都使用模板。如果名称可用,则一次只能在可视树中使用相同的名称。