2009-05-04 13 views
22

आमतौर पर, WPF नियंत्रणों को .xaml फ़ाइलों में घोषित किया जाता है, न कि कोड (.xaml.cs फ़ाइलों) के पीछे कोड में। हालांकि, कभी-कभी मुझे उन नियंत्रणों में से कुछ को नियंत्रित करने के लिए कोड में कुछ नियंत्रणों का उपयोग करने की आवश्यकता होती है। अगर मैं xaml फ़ाइल में "रहता है" तो मैं इस तरह के नियंत्रण के संभाल कैसे प्राप्त कर सकता हूं?नियंत्रण टेम्पलेट में स्थित एक WPF नियंत्रण का उपयोग कैसे करें?

उत्तर

31

आप ControlTemplate क्लास के FindName() विधि का उपयोग कर सकते हैं।

// Finding the grid that is generated by the ControlTemplate of the Button 
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1); 
+0

यह मेरे लिए एक अपवाद अपवाद लौटा रहा था, तो मुझे SO पर कुछ अलग उत्तरों का प्रयास करते समय कुछ एहसास हुआ: यदि आप जिस टेम्पलेट को देख रहे हैं, उसका उपयोग IButton1_ पर लागू किया गया है तो CSharper का उत्तर उपयोग करें। लेकिन अगर MyButton1 केवल टेम्पलेट का सदस्य है, तो '(ग्रिड) myButton1.FindName ("ग्रिड") का उपयोग करें;' इसके बजाय (बटन हैंडलर में उपयोगी)। – Naucle

4

मैं तुम क्या कह रहे हैं के बारे में अनिश्चित हूँ, इसलिए मैं कोशिश करते हैं और दोनों मामलों है कि मैं अपने प्रश्न के रूप में व्याख्या कर रहा हूँ जवाब देंगे।

1) आप एक स्पष्ट नियंत्रण घोषित करने के लिए, और फिर इसे सीधे संपादित चाहते हैं, तुम सब करने की है इस तरह के जैसे नाम संपत्ति सेट है:

<Canvas x:Name="myCanvas"/> 

फिर आप के माध्यम से कैनवास पर पहुंच सकते हैं इस तरह के रूप में नाम:

myCanvas.Background = Brushes.Blue; 

2) आप एक सामान्य नियंत्रण की घोषणा, और फिर इसे उपयोग करने के लिए कई बार देख रहे हैं, तो आप इस तरह यह कर सकते हैं:

<Window> 
    <Window.Resources> 
     <Ellipse x:Key="myEllipse" Height="10" Width="10"> 
    </Window.Resources> 
</Window> 

तब आप उस पूर्वनिर्धारित नियंत्रण कोड में इस सिंटैक्स का उपयोग कर सकते हैं:

Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse"); 

यदि आप एकाधिक नियंत्रण के लिए एक टेम्पलेट के रूप रिसोर्स का उपयोग एक्स जोड़ना चाहते हैं: साझा = "false"।

+0

FindName() वापस लौट रहा है। FindResource() ने मेरे आवेदन के लिए काम किया। धन्यवाद। – JohnForDummies

संबंधित मुद्दे