在我的Silverlight 3用户控件中,我显示了一个基本的DataGrid控件.我需要以编程方式生成列,如下所示:
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>
我想将标题的数据上下文设置为“标题”对象(具有“名称”和“数据”属性,这些属性在DataTemplate中引用).不幸的是,我无法使用建议elsewhere的StackPanel_Loaded事件,因为当用户启动列拖放操作时也会调用事件处理程序.
解决方法
事实证明,可以使用Header属性(类型为Object)作为DataTemplate的DataContext(如上所示设置):
Style headerStyle = (Style)Resources["ColumnHeaderStyle"]; DataGridTextColumn col = new DataGridTextColumn(); col.HeaderStyle = headerStyle; col.Header = myHeaderDataContext; // DataContext for ColumnHeaderStyle dataGrid.Columns.Add(col);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。