2010-03-06 14 views
5

इस तरह टेस्टको नामक एक नियंत्रण की कल्पना करें:टेम्पलेट बाइंडिंग प्रभाव की संपत्ति से बंधी नहीं है?

public class Testko: Control 
    { 
     public static readonly DependencyProperty TestValueProperty; 

     static Testko() 
     { 
      DefaultStyleKeyProperty.OverrideMetadata(typeof(Testko), new FrameworkPropertyMetadata(typeof(Testko))); 
      TestValueProperty = DependencyProperty.Register("TestValue", typeof(double), typeof(Testko), new UIPropertyMetadata((double)1)); 
     } 

     public double TestValue 
     { 
      get { return (double)GetValue(TestValueProperty); } 
      set { SetValue(TestValueProperty, value); } 
     } 
    } 

कुछ भी नहीं, एक डिफ़ॉल्ट मूल्य के साथ एक डबल डबल संपत्ति के साथ बस एक खाली नियंत्रण (डबल) 1। अब, इस तरह की एक सामान्य शैली छवि:

<Style TargetType="{x:Type local:Testko}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:Testko}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
        <StackPanel Orientation="Vertical"> 
         <StackPanel.Effect> 
          <BlurEffect Radius="{TemplateBinding TestValue}" /> 
         </StackPanel.Effect> 
         <Button Content="{TemplateBinding TestValue}" Margin="4" /> 
        </StackPanel> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

अब, समस्या यह है कि त्रिज्या संपत्ति किसी कारण से कभी बंधी नहीं है। वेरास बटन की सामग्री टेस्टवैल्यू संपत्ति के लिए ठीक से बाध्य है। मुझे यकीन है कि मुझे कुछ स्पष्ट याद आ रहा है। या नहीं?

उत्तर

7

तो यह स्पष्ट है, है ना मेरे लिए :-)

मेरा पसंदीदा किताब (WPF अनलीज्ड) कहा गया है कि कभी कभी TemplatedBinding काम नहीं करता है (लेकिन enumerated कारणों अपनी परिस्थितियों से मेल नहीं खाते) है। मैं अपने मामले reproduced

{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TestValue} 

, यानि कि बदलते TestValue केवल बटन पर प्रभाव पड़ता है:

लेकिन TemplatedBinding के लिए एक शॉर्टकट है। इस द्वारा टेम्पलेटेड बाइंडिंग को बदलने के बाद, मुझे वांछित प्रभाव मिलता है।

+0

उत्तर देने के बाद, मैंने पाया कि http://stackoverflow.com/questions/1131222/wpf-templatebinding-vs-relativesource-templatedparent जिसका उत्तर बाध्यकारी और टेम्पलेट बाइंडिंग – Timores

+0

के बीच अंतर के बारे में काफी दिलचस्प है, किसी प्रकार की बग की तरह लगता है मुझे। समाधान के लिए धन्यवाद :-) –

+0

मुझे "{टेम्पलेट बाइंडिंग डायलॉगहेइट}" पर XAML संपादक में "निर्भरता संपत्ति फ़ील्ड गुम है" त्रुटि मिल रही है, जहां डायलॉगहेइट एक ऐसी संपत्ति है जो "INotifyPropertyChanged" से प्राप्त कक्षा से संबंधित है। स्पष्ट रूप से रनटाइम पर कुछ बाध्यकारी त्रुटियां भी प्राप्त कर रही हैं। जैसा कि आपने सलाह दी है बाध्यकारी को बदलना मेरे मुद्दों को हल करता है। धन्यवाद। –

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