Содержание кнопки не обновляется с помощью Frameworkelementfactory - PullRequest
1 голос
/ 15 февраля 2012

Я пытался создать ContentTemplate, используя прекрасный Frameworkelementfactory.

Код работает, за исключением того, что я не могу установить содержимое кнопки. Я перепробовал много вещей, но всегда получаю кнопку с содержанием = кнопка.

Вот код, который генерирует шаблон содержимого. Для вашей дальнейшей информации, я использую это в шаблоне заголовка Tabcontrol ...

Приветствие.

ControlTemplate ct = new ControlTemplate(typeof(TabItem));

FrameworkElementFactory spouter = new FrameworkElementFactory(typeof    (DockPanel));
FrameworkElementFactory text = new FrameworkElementFactory(typeof(TextBlock));
text.SetValue(TextBlock.TextProperty, Name);
spouter.AppendChild(text);

FrameworkElementFactory mButtonPrev = new FrameworkElementFactory(typeof(Button));
mButtonPrev.SetValue(System.Windows.Controls.Button.ContentProperty, "x");
mButtonPrev.AddHandler(System.Windows.Controls.Button.ClickEvent, new RoutedEventHandler(CloseTab));
spouter.AppendChild(mButtonPrev);
ct.VisualTree = spouter;
return ct;

Ответы [ 2 ]

0 голосов
/ 19 января 2017

Для тех, кто все еще использует FEF, я смог установить содержимое моей кнопки с фактической строкой.Я вижу Имя как источник "кнопки" в вашем примере.В моем примере Name выводит имя класса, которое я привязываю к своей сетке данных.

    var buttonTemplate = new FrameworkElementFactory(typeof(Button));
    var text = new FrameworkElementFactory(typeof(TextBlock));
    text.SetValue(TextBlock.TextProperty, "Save");
    buttonTemplate.AppendChild(text);
    buttonTemplate.AddHandler(
        System.Windows.Controls.Primitives.ButtonBase.ClickEvent,
        new RoutedEventHandler((o, e) => MessageBox.Show("hi"))
    );

    AccountDatagrid.Columns.Add(new DataGridTemplateColumn()
    {
        Header = "Save",
        CellTemplate = new DataTemplate() { VisualTree = buttonTemplate }
    });
    AccountDatagrid.ItemsSource = AccoutDescCodeTime.GetBaseAccounts();
0 голосов
/ 15 февраля 2012
ControlTemplate ct = new ControlTemplate(typeof(TabItem));

Разве вы не должны вместо этого создавать DataTemplate здесь?

(Для меня все остальное выглядит хорошо, также FEF устарело, прочитайте документы )

...