سؤال

لدي هذا في XAML بأسلامي:

<DataTrigger Binding="{Binding Path=ButtonStyle}" Value="CutLeft">
  <DataTrigger.Setters>
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
    <Setter Property="CornerRadius" TargetName="border1" Value="0 10 10 0" />
  </DataTrigger.Setters>
</DataTrigger>

وهذا XAML في نافذتي حيث لدي الزر:

<gui:MyCustomButton ButtonStyle="CutLeft"/>

وفي رمز mycustombutton:

public enum ButtonStyles {
    CutLeft, CutRight, Circular, Normal
}

public partial class MyCustomButton 
{
    [DefaultValue(ButtonStyles.Normal)]
    public ButtonStyles ButtonStyle { get; set; }
}

لكنها لا تعمل! أي نصائح؟

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

المحلول

أعتقد أن هناك بعض المشاكل هنا.

الأول هو أنك لا ترفع إشعارات تغيير الممتلكات الخاصة بزر PastyStyle. إما تغيير ButtonStyle إلى خاصية التبعية، أو قم بتنفيذ InotifyPropertychanged على MyCustombutton، ورفع الحدث الخاص بالمنظ العام من Setter ButtonStyle. في هذه الحالة، ربما يكون نهج خاصية التبعية أفضل، لأنه في مرحلة ما، سوف يرغب شخص ما في تعيين ButtyStyle من خلال نمط، ويمكن تصريح DPS فقط.

والثاني هو أن تشغيل البيانات الخاص بك يبدو أن يبحث في سياق البيانات، والذي ربما لا يتحكم في السيطرة. (إذا نظرت إلى نافذة الإخراج، فربما ترى أن أخطاء ملزمة حول عدم القدرة على العثور على خاصية "ButtonStyle" في بعض كائن البيانات.) يمكنك التغلب على هذا عن طريق إضافة RelativeSource={RelativeSource Self} إلى datatrigger الخاص بك. ومع ذلك، إذا قمت بتغيير ButtonStyle إلى DP كما هو مقترح، يجب أن تكون قادرا فقط على استخدام الزناد القديم العادي، والذي يعمل تلقائيا مقابل خصائص عنصر التحكم الذي يتم تصميمه:

<Style.Triggers>
  <Trigger Property="ButtonStyle" Value="CutLeft">
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
  </Trigger>
</Style.Triggers>

(لاحظ أيضا أنك لا تحتاج إلى تحديد Trigger.Setters أو DataTrigger.Setters جزء. سيقوم قارئ XAML بملء ذلك لك.)

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