2012-03-03 12 views
6

मैं अपने वी.एस. परियोजना में दो फ़ाइलें: Custom.csपहुँच XAML सी # कोड-पीछे से नियंत्रित करता है

मेरी XAML फ़ाइल में Custom.xaml और, मेरे पास निम्न पाठ बॉक्स:

<TextBox x:Name="TextBox1" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox1_SelectionChanged" /> 

<TextBox x:Name="TextBox2" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox2_SelectionChanged" /> 

में मेरी

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
} 

मैं succe कर सकते हैं: .cs, मैं निम्नलिखित तरीके होते है, उपरोक्त घटना हैंडलर को जोर से मारा। फिर, मैं और e.Source का उपयोग कर गुणों को पकड़ सकता हूं, लेकिन मैं टेक्स्टबॉक्स 2 और इसकी संपत्तियों तक पहुंच बनाना चाहता हूं।

एक sidenote के रूप, .cs फ़ाइल सिर्फ एक C# वर्ग है कि मैं संदर्भित कर रहा हूँ, नहीं एक xaml.cs है। इसके अतिरिक्त, मैं समझता हूं कि मैं इसे उपयोगकर्ता नियंत्रण के माध्यम से कार्यान्वित कर सकता हूं, लेकिन इस परिदृश्य में इस पोस्ट के दायरे से बाहर के कारणों के लिए ऐसा नहीं कर सकता।

कृपया सलाह दें कि मैं TextBox2 के गुण कैसे प्राप्त/सेट कर सकता हूं।

धन्यवाद।

संपादित करें: इस पर कोई अन्य इनपुट? वर्कअराउंड के रूप में, मैंने टेक्स्टबॉक्स 2_लोडेड नामक एक ईवेंट हैंडलर जोड़ा है, और उसके बाद e.Source को एक इंस्टेंस चर पर सेट किया है। फिर, टेक्स्टबॉक्स 1_SelectionChanged में, मैं आवृत्ति चर का उपयोग कर सकते हैं। वास्तव में सीधे नियंत्रण को लक्षित करना चाहते हैं (उदा। TextBox2.IsEnabled)। मुझे कहीं घोषणा या विरासत खोना चाहिए। FindName का उपयोग कर नियंत्रण भी नहीं ढूंढ सकता।

+0

क्या आप टेक्स्टबॉक्स 2 को दोहराने वाले नियंत्रण (एक ग्रिडव्यू, listview..etc) के आइटम के रूप में उपयोग कर रहे हैं? –

+0

नहीं, मैं ग्रिडव्यू या सूचीदृश्य – Josh

उत्तर

3

ठीक है, तो मैं जाहिरा तौर पर बाहर छोड़ दिया था इस पोस्ट में एक महत्वपूर्ण घटक ... मेरा टेक्स्टबॉक्स नियंत्रण डेटा टेम्पलेट नियंत्रण के अंदर हैं। मेरे शोध से, DataTemplate नियंत्रणों के अंदर टेक्स्टबॉक्स नियंत्रणों तक पहुंचा नहीं जा सकता है। मैंने वास्तव में ऐसा नहीं सोचा था कि इससे कोई फर्क नहीं पड़ता, लेकिन मुझे लगता है कि यह परिदृश्य मौजूद होने पर इंस्टेंस चर नहीं बनाया गया है।

यदि मैंने गलत तरीके से व्याख्या की है, तो कृपया इनपुट प्रदान करें। अभी के लिए, मैं आगे बढ़ गया हूं और एक लोडेड इवेंट जोड़ा है और मेरे टेक्स्टबॉक्स नियंत्रण को आवृत्ति चर के रूप में परिभाषित किया है ताकि मैं उन्हें एक्सेस कर सकूं और अन्य गतिविधियां होने पर गुणों को बदल सकूं।

सभी के इनपुट के लिए धन्यवाद।

+0

बेशक, आप डेटाटेम्प्लेट से नामित घटक तक नहीं पहुंच सकते हैं, यहां तक ​​कि लोड किए गए ईवेंट में भी। आपको अपने सीरेटेड यूआई घटक का उदाहरण पकड़ने की आवश्यकता है। – Ouarzy

3

जब तक आप एक XAML namein, तो आप सीधे नाम से उपयोग कर सकते हैं की स्थापना की है के रूप में (XAML संकलक आप के लिए एक उदाहरण चर पैदा करेगा।)

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
    TextBox2.Text = "Whatever"; 
} 
+0

का उपयोग नहीं कर रहा हूं किसी कारण से मैं टेक्स्टबॉक्स 2 का उपयोग नहीं कर सकता। इंटेलिसेंस इसे प्रदर्शित नहीं करता है और संकलक सोचता है कि यह अनिर्धारित है। क्या मुझे अपनी कक्षा को किसी चीज़ से प्राप्त करने की ज़रूरत है? सार्वजनिक आंशिक वर्ग कस्टम:? – Josh

+0

बिल्ड करने का प्रयास करें ताकि स्टूडियो उन फ़ील्ड को देख सकें जो xaml कंपाइलर बनाएंगे। संपादित करें। हां, आपका कोड पीछे आंशिक वर्ग होना चाहिए जो आपके एक्सएएमएल से मेल खाता हो। – GazTheDestroyer

+0

क्या आप इस बात की पुष्टि कर रहे हैं कि मेरी कक्षा की मेरी परिभाषा सही है या मुझे किसी चीज़ से विरासत प्राप्त करने की आवश्यकता है? इसके अलावा, मैंने कई बार अपनी परियोजना बनाई है। – Josh

0

यह मेरे साथ हुआ। मुझे अपना समाधान बंद करना पड़ा और इसे फिर से खोलना पड़ा।

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