Добавить несколько кнопок в WPF Datagrid - PullRequest
1 голос
/ 04 июля 2019

Я хочу добавить 2-3 кнопки в строки в последнем столбце моей таблицы данных, используя внутренний 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);

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Независимо от того, создаете ли вы его программно или в XAML, DataTemplate может иметь только один корневой элемент, поэтому вам следует установить для свойства VisualTree значение FrameworkElementFactory для Panel и использовать метод 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);
0 голосов
/ 05 июля 2019

Итак, я на iPad, поэтому не могу дать подробностей.Прежде всего позвольте мне сказать, что это очень сложный способ сделать это, и я рекомендую все остальное.Но если вам абсолютно необходимо полностью динамически генерировать вашу сетку, вам нужно поместить кнопку в контейнер.Например, вертикальная панель стека.Затем вы можете добавить столько кнопок, сколько хотите.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...