wpf-如何在c#代码隐藏中写入DataGridCheckBoxColumn下面?

wpf-如何在c#代码隐藏中写入DataGridCheckBoxColumn下面?,wpf,checkbox,Wpf,Checkbox,尝试创建ElementStyle: <DataGridCheckBoxColumn HeaderStyle="{StaticResource MetroDataGridColumnHeader}" Binding="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsThreeState="True"

尝试创建
ElementStyle

<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>
如果希望能够动态创建
HeaderTemplate
,可以使用
XamlReader.Parse
方法(不带事件处理程序):


尝试此操作以创建
元素样式

<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>
如果希望能够动态创建
HeaderTemplate
,可以使用
XamlReader.Parse
方法(不带事件处理程序):


谢谢你的评论,我使用了你的代码,但不幸的是我的问题仍然存在。我进一步附加了我的代码,以了解为什么在我的动态数据网格中选中和取消选中后,我没有获取所选行。附加了您的代码吗?哪里另外,我看不出这与您最初提出的关于如何以编程方式创建对象的问题有什么关系。如果您有新问题,请提出新问题。@mm8他“附加”了他的代码作为答案,然后被某人删除。谢谢您的评论,我使用了您的代码,但不幸的是,我的问题仍然存在。我进一步附加了我的代码,以了解为什么在我的动态数据网格中选中和取消选中后,我没有获取所选行。附加了您的代码吗?哪里另外,我看不出这与您最初提出的关于如何以编程方式创建对象的问题有什么关系。如果您有新问题,请提出新问题。@mm8他“附加”了他的代码作为答案,然后被某人删除。您好,hms,请理解Stackoverflow不是您的代码编写服务。如果你在翻译某一特定部分时遇到问题,你应该只询问这一部分,并包括你自己已经了解的内容。作为如何转换为代码的问题(作为一项原则),所提出的XAML当然不适合。它包含许多琐碎的属性设置程序和许多不同的方面。如果你在翻译某一特定部分时遇到问题,你应该只询问这一部分,并包括你自己已经了解的内容。作为如何转换为代码的问题(作为一项原则),所提出的XAML当然不适合。它包含许多琐碎的属性设置程序和许多不同的方面。
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;
column.HeaderTemplate = Resources["dtAllServerConnectionChkBx"] as DataTemplate;