मैं एक 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
देने की मांग हो जाता है।
असल में, इसे केवल सामग्री नियंत्रण के लिए बुलाया जाता है। मुझे 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