我想使用后端C#而不是XAML向我的数据集的最后一列中的行添加2-3个按钮。我设法添加了一个按钮到细胞,但我有困难,再添加超过这一点。
我尝试创建一个新的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);发布于 2019-07-05 09:37:28
无论是以编程方式还是在XAML中创建它,DataTemplate只能具有单个根元素,因此应该将VisualTree属性设置为Panel的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);发布于 2019-07-04 23:49:18
所以,我在一个iPad,所以我不能给出太多的细节。首先,让我说,这是一个非常困难的方式来做到这一点,我建议几乎任何其他。但是,如果您必须完全动态地生成网格,则需要将按钮放入容器中。例如,垂直堆栈面板。然后,您可以添加任意多的按钮。祝好运!
https://stackoverflow.com/questions/56893549
复制相似问题