【问题标题】:wpf - how to can write below DataGridCheckBoxColumn in c# code behind?wpf - 如何在 C# 代码后面的 DataGridCheckBoxColumn 下方编写?
【发布时间】:2017-07-30 07:37:03
【问题描述】:
<DataGridCheckBoxColumn 
            HeaderStyle="{StaticResource MetroDataGridColumnHeader}" 
            Binding="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
            IsThreeState="True"
            CellStyle="{StaticResource CenterCellStyle}"
            CanUserReorder="False" 
            CanUserResize="False" Header="IsChecked">
<DataGridCheckBoxColumn.HeaderTemplate>
    <DataTemplate x:Name="dtAllServerConnectionChkBx">
            <CheckBox 
                VerticalAlignment="Center" 
                HorizontalAlignment="Center" 
                IsChecked="{Binding Path=DataContext.HeaderChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                x:Name="ckbSelectedAllServerConnections" 
                Checked="UpCheckbox_Checked" 
                Margin="10,0,5,0"       
                Unchecked="UpCheckbox_Checked" />
    </DataTemplate>
</DataGridCheckBoxColumn.HeaderTemplate>

<DataGridCheckBoxColumn.ElementStyle>
    <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}" >
        <EventSetter Event="Checked" Handler="OnChecked" />
        <EventSetter Event="Unchecked" Handler="OnUnChecked"/>
    </Style>
</DataGridCheckBoxColumn.ElementStyle>

【问题讨论】:

  • 您好,请理解 Stackoverflow 不是您的代码编写服务。如果您在翻译特定部分时遇到问题,您应该只询问这部分,并包括您自己已经弄清楚的内容。所呈现的 XAML 当然不适合作为如何转换为代码的问题(作为原则)。它包含许多琐碎的属性设置器和许多不同的方面。

标签: wpf checkbox


【解决方案1】:

试试这个来创建ElementStyle

Style style = new Style(typeof(CheckBox));
style.Setters.Add(new EventSetter(CheckBox.CheckedEvent, new RoutedEventHandler(OnChecked)));
style.Setters.Add(new EventSetter(CheckBox.UncheckedEvent, new RoutedEventHandler(OnUnChecked)));

如果您希望能够动态创建HeaderTemplate,您可以使用XamlReader.Parse 方法(没有事件处理程序):

string xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" x:Name=\"dtAllServerConnectionChkBx\"><CheckBox VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsChecked=\"{Binding Path=DataContext.HeaderChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" x:Name=\"ckbSelectedAllServerConnections\" Margin=\"10,0,5,0\"/></DataTemplate>";
DataTemplate dt = System.Windows.Markup.XamlReader.Parse(xaml) as DataTemplate;

DataGridCheckBoxColumn column = new DataGridCheckBoxColumn();
column.HeaderTemplate = dt;
column.CellStyle = style;

为了能够连接事件处理程序,您需要做一些修改,例如按照此处的建议创建自定义 CheckBox 控件:

Attaching an Event Handler to a Code Generated DataTemplate

或者您可以在 XAML 标记中的 &lt;Windows.Resources&gt; 元素中定义 DataTemplate 并像这样引用它:

column.HeaderTemplate = Resources["dtAllServerConnectionChkBx"] as DataTemplate;

【讨论】:

  • 感谢您的评论,我使用了您的代码,但不幸的是我的问题仍然存在。我已经进一步附加了我的代码,以查看为什么在我的动态数据网格中选中和取消选中后我没有得到选定的行。
  • 附上你的代码?在哪里?另外,我看不到这与您关于如何以编程方式创建对象的原始问题有何关系。如果您有新问题,请提出新问题。
  • @mm8 他“附加”了他的代码作为答案,然后被某人删除。
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 2014-04-05
  • 2011-02-20
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多