मेरे पास एकाधिक टेक्स्टब्लॉक हैं जो मेरे आवेदन में विभिन्न तत्वों का संदर्भ देते हैं। पृष्ठ में सीधे उपयोग किए जाने पर मेरा कोड ठीक काम करता है। हालांकि, मैं कोड के डुप्लिकेशन को कम करने के लिए एक ControlTemplate और ContentControl बनाना चाहता हूं।मैं ControlTemplate में एलीमेंटनाम बाइंडिंग का उपयोग कैसे कर सकता हूं?
टेम्पलेट बाइंडिंग का उपयोग कर ContentControl से ControlTemplate में ElementName के संदर्भ को मैं कैसे पास कर सकता हूं?
"Cannot convert the value in attribute 'ElementName' to object of type 'System.String'. Object of type 'System.Windows.TemplateBindingExpression' cannot be converted to type 'System.String'. "
टैग विशेषता के अलावा, मैं कोशिश की है ContentStringFormat जो भी काम नहीं किया: निम्न कोड इस त्रुटि फेंकता है।
टेम्पलेट्स का उपयोग करके इसे काम करने के लिए सही तरीका क्या है?
आपकी मदद के लिए अग्रिम धन्यवाद,
--- शॉन
यहाँ कोड नमूना है:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Page.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type ContentControl}">
<TextBlock Margin="{Binding ElementName={TemplateBinding Tag}, Path=Margin}" Text="{TemplateBinding Content}" TextAlignment="{Binding ElementName={TemplateBinding Tag}, Path=TextAlignment}" Width="{Binding ElementName={TemplateBinding Tag}, Path=Width}" />
</ControlTemplate>
</Page.Resources>
<StackPanel>
<TextBlock x:Name="AnotherElement" Margin="10" Text="Main TextBlock" TextAlignment="Center" Width="100" />
<TextBlock x:Name="AnotherElement2" Margin="20" Text="Second TextBlock" TextAlignment="Left" Width="250" />
<TextBlock Margin="{Binding ElementName=AnotherElement, Path=Margin}" Text="Here is my TextBlock!" TextAlignment="{Binding ElementName=AnotherElement, Path=TextAlignment}" TextTrimming="CharacterEllipsis" Width="{Binding ElementName=AnotherElement, Path=Width}" />
<TextBlock Margin="{Binding ElementName=AnotherElement2, Path=Margin}" Text="Here is my Second TextBlock!" TextAlignment="{Binding ElementName=AnotherElement2, Path=TextAlignment}" TextTrimming="CharacterEllipsis" Width="{Binding ElementName=AnotherElement2, Path=Width}" />
<ContentControl Content="Hello!" Tag="AnotherElement" Template="{StaticResource MyTemplate}" />
<ContentControl Content="Hello Again!" Tag="AnotherElement2" Template="{StaticResource MyTemplate}" />
</StackPanel>
</Page>
शैली क्यों नहीं बनाते और उन सभी नियंत्रणों पर लागू होते हैं जिन्हें उस शैली की आवश्यकता होती है? आप एक संपत्ति पर कुछ संपत्ति को परिभाषित क्यों करना चाहते हैं और उसके बाद अन्य नियंत्रण बांधना चाहते हैं? यह सबसे अच्छा अजीब लगता है। –
@ ब्रेंट एक टैग प्रॉपर्टी में जानकारी संग्रहीत करना एमएस एक्सेस फॉर्म डेवलपमेंट के साथ एक तकनीक थी। यह आपके नियंत्रण पर कुछ संपत्ति/हैंडलर से बंधे वीबीए फ़ंक्शन को कुछ हार्डकोडेड मान पास करने का एक सस्ता और बुरा तरीका था। हमें डब्लूपीएफ में इसकी आवश्यकता नहीं है क्योंकि हमारे पास हमारे निपटारे में उपकरण की विस्तृत श्रृंखला है =) – failedprogramming
@ ब्रेंटस्टवार्ट इस कार्यान्वयन का अंतिम परिणाम एमवीवीएम, बाइंडिंग्स, डेटा टेम्पलेट्स आदि का उपयोग करके कॉलम में जानकारी प्रदर्शित कर रहा है। मैंने अपना उदाहरण विशेष रूप से घटाया इस साइट पर पूछने के लिए। मैंने ग्रिड का उपयोग नहीं करना चुना और इसके बजाय एक रैपपैनल का उपयोग किया क्योंकि मुझे लगा कि यह उपयोग करना आसान और साफ था। मैं एक टेक्स्टब्लॉक के कई गुणों को बाध्यकारी कर रहा हूं क्योंकि मैं अपने कॉलम मान को अपने विशिष्ट शीर्षलेख (मार्जिन, चौड़ाई, संरेखण इत्यादि) के लिए निर्धारित गुणों की प्रतिलिपि बनाना चाहता हूं। शैलियों का उपयोग करके आप इसे कैसे कार्यान्वित करेंगे जब प्रत्येक टेक्स्टब्लॉक के लिए यह एक अलग तत्वनाम का संदर्भ देगा? –