سؤال

لدي خاصية التبعية (المقدمة) على عنصر تحكم مخصص يرث من السيطرة. عندما أقوم بتحميل عنصر التحكم، أريد أن أرى ما إذا كان المستخدم قد حدد خاصية التبعية أو إذا كان يستخدم القيمة الافتراضية الخاصة به قبل تعيين القيمة لهم. المشكلة أكثر تعقيدا قليلا ثم، هنا هي:

عنصر التحكم في مكتبة مراقبة مخصصة يضيفها المستخدم إلى مشروعهم. عندما يقومون بإعداد مشروعهم، لدي القدرة على إضافة خط إلى ملف App.xaml الخاص بهم باستخدام مفتاح X: يحتوي على الإعدادات التي قرأتها أثناء ضبط القيم الافتراضية لعناصر التحكم الخاصة بي. ومع ذلك، إذا حددوا القيمة إما في التعليمات البرمجية، أو في XAML، فأنا لا أريد تعيين القيمة باستخدام هذه القيمة العالمية. فيما يلي بعض الحالات للمساعدة في تصور ما أتحدث عنه:

  1. يقوم المستخدم بإنشاء عنصر تحكم من مكتبتي ويضعه على صفحته. ثم وضعوا المقدمة إلى الأخضر. أريد أن تكون قيمة المقدمة أخضر لهذا السيطرة.

  2. يضيف المستخدم سطر خاص إلى App.xaml الذي ينص على أنهم يريدون جميع عناصر التحكم من نوع معين لديهم مقدمة من اللون الأحمر. أريد أن تكون قيمة مقدمة جميع عناصر التحكم في هذا النوع باللون الأحمر.

  3. يضيف المستخدم سطر خاص إلى App.xaml الذي ينص على أنهم يريدون جميع عناصر التحكم من نوع معين لديهم مقدمة من اللون الأحمر. ثم قاموا بتعيين قيمة المقدمة من عنصر تحكم واحد (في XAML) إلى الأصفر. أريد أن تكون قيمة المقدمة من جميع عناصر التحكم في هذا النوع من الحمراء، باستثناء الشخص الذي يحدده أنه أصفر.

عند تحميل عنصر التحكم، أريد قراءة خاصية التبعية لمعرفة ما إذا كانت قد حددت القيمة، أو إذا كانت القيمة الافتراضية التي يتم تعريفها في النمط. إذا كانت القيمة الافتراضية، أريد بعد ذلك قراءة سطر خاص بها من ملف App.xaml وقم بتعيين الأرض الصدارة لهذا اللون.

هل كانت مفيدة؟

المحلول 2

لقد فعلت المزيد من البحث قليلا وأعتقد أنني وجدت إجابة. عندما أقوم بتحميل عنصر التحكم (أو التحديث)، أتحقق من نوع ReadLocalValue.(المقدمةproperty) إذا كان هذا النوع هو System.Object ثم لم يتم تعيينه في XAML. ومع ذلك، إذا كان هذا النوع شيء آخر ثم System.Object (مثل System.windows.media.brush) ثم تم ضبطه في Xaml.

نصائح أخرى

تمديد الحل الخاص بك لإكمال، من MSDN Page ReadLocalValue.:

if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue)
    // Do your thing...

وهذا هو، هناك dendencyproperty.unsetvalue الذي للتحقق مما إذا تم تعيين القيمة أم لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top