我試圖建立一個ContentControl
派生的控件(我們稱之爲MyContentControl
),將有其ControlTemplate
由DataTemplateSelector
派生類型的實例集(姑且稱之爲它MyTemplateSelector
)。WPF DataTemplateSelector.SelectTemplate不是呼籲ContentControl中衍生型
當我嘗試這樣的:
ContentControl contentControl = new ContentControl();
contentControl.ContentTemplateSelector = new MyTemplateSelector();
contentControl.Content = "Some ContentControl Content";
MyContentControl myContentControl = new MyContentControl();
myContentControl.ContentTemplateSelector = new MyTemplateSelector();
myContentControl.Content = "Some MyControl Content";
我想到的是,當我在這些控件設置內容,MyTemplateSelector
的DataTemplateSelector.SelectTemplate()
方法的覆蓋被調用兩個contentControl
和myContentControl
。
實際上,它僅被稱爲contentControl。我需要做些什麼(以及爲什麼!)以使其適用於myContentControl
?
(不知道這是否有關,但目前MyContentControl
不超過重寫的元數據信息DefaultStyleKeyProperty
與DependencyProperties
其他做什麼
編輯(移動從其他崗位原題內容):
這裏是一個比較詳盡的例子:
創建MyContentControl:
public class MyContentControl : ContentControl { static MyContentControl() { DefaultStyleKeyProperty.OverrideMetadata(typeof (MyContentControl), new FrameworkPropertyMetadata(typeof (MyContentControl))); } public MyContentControl() {} }
創建
MyTemplateSelector
:public class MyTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { return null; // <== Place the breakpoint here } }
添加
ContentControl
和MyContent
控制到主窗口(例如):<StackPanel> <local:MyContentControl x:Name="myContentControl" /> <ContentControl x:Name="contentControl" /> </StackPanel>
添加該代碼
InitializeComponent
(或Loaded
後某處處理器):myContentControl.ContentTemplateSelector = new MyTemplateSelector(); myContentControl.Content = "123"; contentControl.ContentTemplateSelector = new MyTemplateSelector(); contentControl.Content = "ABC";
在步驟(2)中提到的斷點被擊中只有一次,對於content="ABC"
和contentControl
元件。
謝謝。這爲我節省了一些硬幣。 – dotNET 2016-09-02 13:21:29