2013-01-11 46 views
5

मैं एक विंडो से एक छवि को एक उपयोगकर्ता नियंत्रण 'प्रदर्शन' में उपयोगकर्ता को नियंत्रित करने की कोशिश कर रहा हूं जो UserControl 'DisplayHandler' के अंदर है। डिस्प्ले में निर्भरता प्रॉपर्टी 'डिस्प्ले इमेज' है। यह this के समान है, लेकिन उनके उत्तरों ने मेरी समस्या से मदद नहीं की।उपयोगकर्ता नियंत्रण में घिरे नियंत्रण की निर्भरता प्रॉपर्टी का प्रदर्शन कैसे करें?

डिस्प्ले हैंडलर में संपत्ति 'प्रदर्शन छवि' भी होनी चाहिए और बाध्यकारी को प्रदर्शित करने के लिए पास होना चाहिए। लेकिन विजुअल स्टूडियो मुझे एक ही नाम के साथ एक निर्भरता प्रॉपर्टी पंजीकृत करने की अनुमति नहीं देता है। इसलिए मैं इसे दो बार पंजीकृत नहीं की कोशिश की लेकिन केवल यह पुन: उपयोग करने:

खिड़की

<my:DisplayHandler DisplayImage= 
    "{Binding ElementName=ImageList, Path=SelectedItem.Image}" /> 

DisplayHandler

XAML

<my:Display x:Name="display1"/> 

सीएस

public static readonly DependencyProperty DisplayImageProperty = 
    myHWindowCtrl.DisplayImageProperty.AddOwner(typeof(DisplayHandler)); 

public HImage DisplayImage { 
    get { return (HImage)GetValue(DisplayImageProperty); } 
    set { SetValue(DisplayImageProperty, value); } 
} 
public HImage DisplayImage /*alternative*/ { 
    get { return (HImage)display1.GetValue(Display.DisplayImageProperty); } 
    set { display1.SetValue(Display.DisplayImageProperty, value); } 
} 

** 2 संपत्तियों के न बाहर काम किया। *

प्रदर्शन

public HImage DisplayImage { 
    get { return (HImage)GetValue(DisplayImageProperty); } 
    set { SetValue(DisplayImageProperty, value); } 
} 
public static readonly DependencyProperty DisplayImageProperty = 
    DependencyProperty.Register("DisplayImage", typeof(HImage), typeof(Display)); 

मैं सोच कर दिया गया है एक नियंत्रण ट्री ऊपर जाता है और इसकी संपत्ति का अपना है, तो के लिए लग रहा है मान परिभाषित नहीं किया गया है। ->reference

तो यह चाहिए किसी भी तरह काम ...

मैं क्योंकि उस ImageList के लिए काम किया (ImageList भी प्रदर्शन में शामिल है) Templating और एक ContentPresenter के साथ कुछ प्रयास किए, लेकिन मैं इसे करने के लिए नहीं मिल सका एक सूची बॉक्स के लिए मूल्य बांधें।

उत्तर

4

AddOwner समाधान काम करना चाहिए, लेकिन आपको PropertyChangedCallback जोड़ना होगा जो एम्बेडेड नियंत्रण को अपडेट करता है।

public partial class DisplayHandler : UserControl 
{ 
    public static readonly DependencyProperty DisplayImageProperty = 
     Display.DisplayImageProperty.AddOwner(typeof(DisplayHandler), 
      new FrameworkPropertyMetadata(DisplayImagePropertyChanged)); 

    public HImage DisplayImage 
    { 
     get { return (Image)GetValue(DisplayImageProperty); } 
     set { SetValue(DisplayImageProperty, value); } 
    } 

    private static void DisplayImagePropertyChanged(
     DependencyObject obj, DependencyPropertyChangedEventArgs e) 
    { 
     var dh = obj as DisplayHandler; 
     dh.display1.DisplayImage = e.NewValue as HImage; 
    } 
} 
+0

धन्यवाद! यह ठीक काम करता है। लेकिन मुझे पता चला कि 'DisplayImage =" {बाध्यकारी सापेक्ष स्रोत = {सापेक्ष स्रोत पूर्वजों टाइप = ह्यूव: डिस्प्ले हैंडलर}, पथ = डिस्प्ले इमेज} "/> 'अतिरिक्त रूप से मुझे दोबारा बाध्यकारी के साथ समर्थन करता है। –

+0

मुझे उम्मीद है कि यह _same_ डीपी था और इसलिए चेंज नोटिफिकेशन काम करेगा। ऐसा लगता है, यह फिर से मूल्य दो बार स्टोर करता है। क्या मै गलत हु? –

+0

यह वास्तव में एक ही डीपी है, लेकिन यह मूल्य दो बार स्टोर करता है। सबसे पहले यह एम्बेडेड डिस्प्ले इंस्टेंस पर डिस्प्ले हैंडलर पर मूल्य और फिर (PropertyCangedCallback में) को संग्रहीत करता है। लेकिन समस्या क्या है? यह सिर्फ एक ऑब्जेक्ट संदर्भ संग्रहित कर रहा है। या हिमाज एक बड़ी संरचना है? – Clemens