【问题标题】:How could I access checkbox control placed in WPF datagrid columnHeaderStyle as ContentTemplate如何访问放置在 WPF 数据网格 columnHeaderStyle 中的复选框控件作为 ContentTemplate
【发布时间】:2014-08-13 09:01:37
【问题描述】:

我在自动生成的 WPF 数据网格 ColumnHeaderStyle 中放置了一个复选框控件,如下所示:

<DataGrid.ColumnHeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <CheckBox x:Name="HeaderCheckBox" Content="{Binding}" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.ColumnHeaderStyle>

如何在后面的代码中访问 CheckBox?数据网格中会有多列,我怎样才能确定(按列)复选框是否被选中?
请提出建议。

【问题讨论】:

标签: c# wpf wpfdatagrid


【解决方案1】:

只需添加事件CheckedUnchecked,一旦你检查了它就会引发事件

 <DataGrid.ColumnHeaderStyle>
                <Style TargetType="DataGridColumnHeader">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <CheckBox x:Name="HeaderCheckBox" Content="{Binding}"
                                 Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
    </DataGrid.ColumnHeaderStyle>

【讨论】:

  • 感谢 moez 的回复。我还有一个查询,我的数据网格有一些只读列,我不想在这些列的标题中显示复选框,我怎么能做到这一点?
  • 好的,首先如果这个答案很好,请把它作为答案,然后要解决你的问题,你只需要在你的列数据模板中添加一个 DataTemplate.Triggers
  • 谢谢 moez。我已将您的回复标记为答案。您的回复很有帮助。我尝试使用 DataTemplate.Triggers 但没有找到 IsReadOnly 属性来检查此上下文。能否请您帮忙,如何使用触发器隐藏只读列的复选框。
【解决方案2】:

只需实现CheckedUnchecked 事件

  <DataGrid.ColumnHeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <CheckBox x:Name="HeaderCheckBox" Content="{Binding}"
                                     Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
        </DataGrid.ColumnHeaderStyle>

     private void CheckBoxChanged(object sender, RoutedEventArgs e)
     {
                // add what you want
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多