在我的 银光3 用户控件 我正在展示一个基本的 数据网格 控制。我需要以编程方式生成列 如下:
Style headerStyle = (Style)Resources["ColumnHeaderStyle"];
DataGridTextColumn col = new DataGridTextColumn();
col.HeaderStyle = headerStyle;
dataGrid.Columns.Add(col);
样式定义如下:
<Style x:Name="ColumnStyle" x:Key="ColumnHeaderStyle"
TargetType="prim:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Loaded="StackPanel_Loaded">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Data}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
我要将 header 的数据上下文设置为“ header ”对象 (具有在 DataTemplate 中引用的“名称”和“数据”属性)。不幸的是,我不能按照建议使用 StackPanel_Loaded 事件 elsewhere ,因为当用户开始列拖放操作时也会调用事件处理程序。
设置 DataGrid 列标题的 DataContext 的正确方法是什么?
最佳答案
事实证明,可以使用 标题属性 (对象类型)作为 DataTemplate 的 DataContext (设置如上图):
Style headerStyle = (Style)Resources["ColumnHeaderStyle"];
DataGridTextColumn col = new DataGridTextColumn();
col.HeaderStyle = headerStyle;
col.Header = myHeaderDataContext; // DataContext for ColumnHeaderStyle
dataGrid.Columns.Add(col);
关于silverlight - 如何在 DataGrid 列标题上设置 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1786773/