2012-02-15 82 views
1

我一直在嘗試使用可愛的Frameworkelementfactory創建ContentTemplate。使用Frameworkelementfactory不更新按鈕內容

代碼工作除了我不能設置按鈕的內容。我已經嘗試了很多東西,但我總是最終得到一個Button with Button = Button。

下面是生成contenttemplate的代碼。爲了您的更多信息,我正在使用Tabcontrol Header Itemtemplate ...

乾杯。

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; 

回答

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

你不是應該在這裏創建DataTemplate呢?

(其他的一切看起來好像沒什麼問題,也FEF已過時,讀the docs

+0

您好,我已閱讀文檔。它是一個TabItem,我設置了TabItem.Template,雖然在XAML中是Datatemplate類型,但我無法將其轉換爲Datatemplate。使用Controltemplate排序的作品!使用Xaml.load非常慢,也不能投射。是的,我已閱讀它已被棄用。但爲什麼應該處理程序工作,但不是內容? – stackeroverflow 2012-02-15 16:52:14

0

對於那些使用仍然使用FEF,我能我的按鈕的內容設置與實際字符串。我看到Name是你的例子中的「button」來自哪裏。在我的例子中,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();