[英]DataTrigger doesn't work
我在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在我有按鈕的Window中:
<gui:MyCustomButton ButtonStyle="CutLeft"/>
在MyCustomButton代碼中:
public enum ButtonStyles {
CutLeft, CutRight, Circular, Normal
}
public partial class MyCustomButton
{
[DefaultValue(ButtonStyles.Normal)]
public ButtonStyles ButtonStyle { get; set; }
}
但這不起作用! 有小費嗎?
我認為這里有兩個問題。
首先是您沒有引發ButtonStyle的屬性更改通知。 將ButtonStyle更改為依賴項屬性,或在MyCustomButton上實現INotifyPropertyChanged,然后從ButtonStyle設置器引發PropertyChanged事件。 在這種情況下,依賴屬性方法可能會更好,因為在某些時候,有人會想要通過樣式設置ButtonStyle,並且只能設置DP的樣式。
第二個是您的數據觸發器似乎正在查看數據上下文,這可能不是控件。 (如果您在“輸出”窗口中查看,可能會看到關於無法在某些數據對象上找到'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
元素DataTrigger.Setters
閱讀器將為您填充該元素。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.