向WPF数据网格添加多个按钮

uxh89sit  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(366)

我想添加2-3个按钮到我的datagrid的最后一列的行使用后端C#而不是XAML。我设法添加一个按钮到单元格,但我有麻烦添加超过了。
我尝试过创建一个新的FrameworkElementFactory并将其添加到列中,但它只是替换了上一个按钮,而不是添加按钮。

DataGridTemplateColumn buttonColumn = new DataGridTemplateColumn();
        buttonColumn.Header = "Actions";
        buttonColumn.Width = 209;

        DataTemplate buttonTemplate = new DataTemplate();
        FrameworkElementFactory buttonFactory = new FrameworkElementFactory(typeof(Button));
        buttonTemplate.VisualTree = buttonFactory;

        buttonFactory.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(Activate));
        buttonFactory.SetValue(ContentProperty, "A");
        buttonColumn.CellTemplate = buttonTemplate;

        dGrid_SavedData.Columns.Add(buttonColumn);
qyzbxkaa

qyzbxkaa1#

无论是以编程方式还是在XAML中创建,DataTemplate都只能有一个根元素,因此对于Panel,应将VisualTree属性设置为FrameworkElementFactory,并使用AppendChild方法将按钮工厂添加到面板工厂,例如:

DataGridTemplateColumn buttonColumn = new DataGridTemplateColumn();
buttonColumn.Header = "Actions";
buttonColumn.Width = 209;

DataTemplate buttonTemplate = new DataTemplate();
FrameworkElementFactory panelFactory = new FrameworkElementFactory(typeof(StackPanel));
buttonTemplate.VisualTree = panelFactory;

FrameworkElementFactory buttonAFactory = new FrameworkElementFactory(typeof(Button));
buttonAFactory.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(Activate));
buttonAFactory.SetValue(ContentProperty, "A");

FrameworkElementFactory buttonBFactory = new FrameworkElementFactory(typeof(Button));
buttonBFactory.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(Activate));
buttonBFactory.SetValue(ContentProperty, "B");

panelFactory.AppendChild(buttonAFactory);
panelFactory.AppendChild(buttonBFactory);

buttonColumn.CellTemplate = buttonTemplate;

dGrid_SavedData.Columns.Add(buttonColumn);
sigwle7e

sigwle7e2#

我用的是iPad,所以我不能给予太多细节。首先,我想说这是一个非常困难的方法,我推荐其他任何方法。但如果你必须完全动态地生成网格,你需要把按钮放在一个容器中。例如,一个垂直堆叠面板。然后你可以添加任意多的按钮。祝你好运!

iqxoj9l9

iqxoj9l93#

这是代码段

<DataGrid x:Name="dgStudent" d:ItemsSource="{d:SampleData ItemCount=5}" Margin="0,44,0,0" Grid.RowSpan="2">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Edit">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Name="btnEdit" Content="Edit" Click="btnEdit_Click" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Delete">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Name="btnDelete" Content="Delete" Click="btnDelete_Click" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

相关问题