繁体   English   中英

如何在 C# 代码中为 wpf 中具有特定模板的数据网格生成一列

[英]how to generate a column in C# code for datagrid that have specific template in wpf

我有这段代码并且运行良好,但我想在 C# 中动态更改它。 谁能帮我将此 XAML 代码转换为 C# 代码?

注意:我在 C# 代码的页面加载中设置了这个数据网格的 Itemsource

注意:我想将此列转换为 C# 代码后,将 AutoGenerateColumns 更改为 true

 <DataGrid x:Name="dg" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding ValueA}" />
                                    <TextBlock Text="{Binding ValueB}" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

自动生成列 = 假:

public partial class MyPage:Page
{
    public MyPage()
    {
        InitializeDataGrid();
        Loaded += MyPage_Loaded;

        // don't forget to add the _dataGrid into the page
        this.Content = _dataGrid;
    }

    private void MyPage_Loaded(object sender, RoutedEventArgs e)
    {
        //_dataGrid.ItemsSource = xxx;
    }

    private void InitializeDataGrid()
    {
        // <DataGrid x:Name="dg" AutoGenerateColumns="False">
        //    <DataGrid.Columns>
        //        <DataGridTemplateColumn>
        //            <DataGridTemplateColumn.CellTemplate>
        //                <DataTemplate>
        //                    <StackPanel Orientation="Horizontal">
        //                        <TextBlock Text="{Binding ValueA}" />
        //                        <TextBlock Text="{Binding ValueB}" />
        //                    </StackPanel>
        //                </DataTemplate>
        //            </DataGridTemplateColumn.CellTemplate>
        //        </DataGridTemplateColumn>
        //    </DataGrid.Columns>
        //</DataGrid>

        // StackPanel and Children
        var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
        stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

        var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock));
        textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA"));

        var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock));
        textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB"));

        stackPanelFactory.AppendChild(textBlockFactoryA);
        stackPanelFactory.AppendChild(textBlockFactoryB);

        // DataTemplate
        var dataTemplate = new DataTemplate
        {
            VisualTree = stackPanelFactory
        };

        // DataGridTemplateColumn
        var templateColumn = new DataGridTemplateColumn
        {
            CellTemplate = dataTemplate
        };

        _dataGrid.Columns.Add(templateColumn);

        // DataGrid
        _dataGrid.Name = "gd";
        _dataGrid.AutoGenerateColumns = false;
    }

    private readonly DataGrid _dataGrid = new DataGrid();
}

自动生成列 = 真:

public partial class MyPage:Page
{
    public MyPage()
    {
        InitializeDataGrid();
        Loaded += MyPage_Loaded;

        // don't forget to add the _dataGrid into the page
        this.Content = _dataGrid;
    }

    private void MyPage_Loaded(object sender, RoutedEventArgs e)
    {
        //_dataGrid.ItemsSource = xxx;
    }

    private void InitializeDataGrid()
    {
        // <DataGrid x:Name="dg" AutoGenerateColumns="False">
        //    <DataGrid.Columns>
        //        <DataGridTemplateColumn>
        //            <DataGridTemplateColumn.CellTemplate>
        //                <DataTemplate>
        //                    <StackPanel Orientation="Horizontal">
        //                        <TextBlock Text="{Binding ValueA}" />
        //                        <TextBlock Text="{Binding ValueB}" />
        //                    </StackPanel>
        //                </DataTemplate>
        //            </DataGridTemplateColumn.CellTemplate>
        //        </DataGridTemplateColumn>
        //    </DataGrid.Columns>
        //</DataGrid>

        //// StackPanel and Children
        //var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
        //stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

        //var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock));
        //textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA"));

        //var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock));
        //textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB"));

        //stackPanelFactory.AppendChild(textBlockFactoryA);
        //stackPanelFactory.AppendChild(textBlockFactoryB);

        // DataTemplate
        var dataTemplate = new DataTemplate
        {
            //VisualTree = stackPanelFactory
        };

        // DataGridTemplateColumn
        var templateColumn = new DataGridTemplateColumn
        {
            CellTemplate = dataTemplate
        };

        _dataGrid.Columns.Add(templateColumn);

        // DataGrid
        _dataGrid.Name = "gd";
        _dataGrid.AutoGenerateColumns = true;
    }

    private readonly DataGrid _dataGrid = new DataGrid();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM