在 AutoGeneratingColumn 期间将 CheckBox 设置为 UWP DataGrid 列标题

Roy Li - MSFT 33,496 信誉分 Microsoft 供应商
2024-08-30T06:39:25.63+00:00

你好

我想将 Community Toolkit DataGrid 列标题设置为 CheckBox。

我想在 AutoGeneratingColum 事件中执行此操作。我正在尝试这样的代码:

 

private void AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)   
{
       if(e.PropertyName == "IsSelected")
       {
             var templateColumn = new DataGridTemplateColumn();
             templateColumn.Header = new CheckBox();
             var template = (DataTemplate)this.Resources["dataTemplate"];
             templateColumn.CellTemplate = template;
             e.Column = templateColumn;
       }
}

 

但是代码行 “templateColumn.Header = new CheckBox();” 会导致异常。

请告诉我如何完成我的想法。

   

此问题由:Setting CheckBox as UWP DataGrid column header during AutoGeneratingColumn - Microsoft Q&A 总结而来

通用 Windows 平台 (UWP)
通用 Windows 平台 (UWP)
一个 Microsoft 平台,用于生成和发布适用于 Windows 桌面设备的应用。
55 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Junjie Zhu - MSFT 19,746 信誉分 Microsoft 供应商
    2024-08-30T10:04:19.0433333+00:00

    你好

    欢迎来到微软问答!

    下面是一个解决方法。从代码端设置 ControlTemplate很难, 我们可以尝试在 Xaml 资源中创建新的DataGridColumnHeader样式,并在 AutoGeneratingColumn 事件中使用该样式。

       // xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
       // xmlns:wctprimitives="using:Microsoft.Toolkit.Uwp.UI.Controls.Primitives"
        <Grid>
            <Grid.Resources>
                <Style x:Name="dataGridcheckbostyle" TargetType="wctprimitives:DataGridColumnHeader">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="wctprimitives:DataGridColumnHeader">
                                <CheckBox Content="Test" />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Grid.Resources>
            <controls:DataGrid x:Name="dataGrid1" 
                    Height="600" Margin="12"
                    AutoGenerateColumns="True"
                    AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn"
                    ItemsSource="{x:Bind CustomerList}">
                
            </controls:DataGrid>
        </Grid>
    
    
    
     public sealed partial class MainPage : Page
     {
         public List<Customer> CustomerList= new List<Customer>();
         public MainPage()
         {
             this.InitializeComponent();
             CustomerList = new List<Customer> {
                 new Customer("A.", "Zero",
                 "12 North Third Street, Apartment 45",
                 false),
             new Customer("B.", "One",
                 "34 West Fifth Street, Apartment 67",
                 false),
             new Customer("C.", "Two",
                 "56 East Seventh Street, Apartment 89",
                 true),
             new Customer("D.", "Three",
                 "78 South Ninth Street, Apartment 10",
                 true)
             };
         
             
         }
         private void dataGrid1_AutoGeneratingColumn(object sender, Microsoft.Toolkit.Uwp.UI.Controls.DataGridAutoGeneratingColumnEventArgs e)
         {
             if (e.PropertyName == "IsNew")
             {
                 
                 e.Column.HeaderStyle = dataGridcheckbostyle;
             }
         }
     }
    
     public class Customer
     {
         public String FirstName { get; set; }
         public String LastName { get; set; }
         public String Address { get; set; }
         public Boolean IsNew { get; set; }
         public Customer(String firstName, String lastName,
            String address, Boolean isNew)
         {
             this.FirstName = firstName;
             this.LastName = lastName;
             this.Address = address;
             this.IsNew = isNew;
         }
     }
    
    
    

    谢谢。


    如果答案是正确的解决方案,请点击“接受答案”并慷慨地投赞成票。如果您对此答案有其他问题,请点击“评论”。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。