积极答复者
无法在trigger中setter自定义的依赖属性??

问题
-
<tb:TaskbarIcon x:Name="NotifyIcon" IconSource="pack://application:,,,/Resources/Images/Icon/QQ.ico" ToolTipText="YYY" TrayMouseMove="NotifyIcon_TrayMouseMove"> <tb:TaskbarIcon.Style> <Style TargetType="{x:Type tb:TaskbarIcon}"> <Style.Triggers> <DataTrigger Binding="{Binding ToolTipMode, Converter={StaticResource toolTipModeConverter}}" Value="NotifyBox"> <Setter Property="ToolTipText" Value="xxx" /> <!--这个是无效的--> <Setter Property="Visibility" Value="Collapsed" /> <!--这个是可以的--> </DataTrigger> </Style.Triggers> </Style> </tb:TaskbarIcon.Style> </tb:TaskbarIcon>
TaskbarIcon是网上找的一个控制托盘图标的自定义控件。另外,不明白Style下面的Triggers与控件下面的Triggers有什么区别,我换成tb:TaskbarIcon.Triggers 一运行就报错
答案
-
你用的控件是 http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx 吗?
我看了下源码,有 ToolTipText 属性,但是你用了一个local值覆盖你的style里面的值, ToolTipText="YYY"
WPF,直接设置在元素上的属性值叫做local值,他的优先级高于样式和模板中设置的值,所以你的样式无法覆盖local值。你应该这么写:
<tb:TaskbarIcon x:Name="NotifyIcon" IconSource="pack://application:,,,/Resources/Images/Icon/QQ.ico" TrayMouseMove="NotifyIcon_TrayMouseMove"> <tb:TaskbarIcon.Style> <Style TargetType="{x:Type tb:TaskbarIcon}"> <Setter Property="ToolTipText" Value="YYY" /> <Style.Triggers> <DataTrigger Binding="{Binding ToolTipMode, Converter={StaticResource toolTipModeConverter}}" Value="NotifyBox"> <Setter Property="ToolTipText" Value="xxx" /> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </tb:TaskbarIcon.Style> </tb:TaskbarIcon>
control.Style 里面可以设置各种Trigger, 而control.Triggers里面只能放 EventTrigger. 后者只是为了简化EventTrigger的使用,抽离出来Style而已。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Jie BaoModerator 2011年8月1日 11:00
- 已标记为答案 Behindmoon 2011年8月1日 13:57
全部回复
-
你用的控件是 http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx 吗?
我看了下源码,有 ToolTipText 属性,但是你用了一个local值覆盖你的style里面的值, ToolTipText="YYY"
WPF,直接设置在元素上的属性值叫做local值,他的优先级高于样式和模板中设置的值,所以你的样式无法覆盖local值。你应该这么写:
<tb:TaskbarIcon x:Name="NotifyIcon" IconSource="pack://application:,,,/Resources/Images/Icon/QQ.ico" TrayMouseMove="NotifyIcon_TrayMouseMove"> <tb:TaskbarIcon.Style> <Style TargetType="{x:Type tb:TaskbarIcon}"> <Setter Property="ToolTipText" Value="YYY" /> <Style.Triggers> <DataTrigger Binding="{Binding ToolTipMode, Converter={StaticResource toolTipModeConverter}}" Value="NotifyBox"> <Setter Property="ToolTipText" Value="xxx" /> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </tb:TaskbarIcon.Style> </tb:TaskbarIcon>
control.Style 里面可以设置各种Trigger, 而control.Triggers里面只能放 EventTrigger. 后者只是为了简化EventTrigger的使用,抽离出来Style而已。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Jie BaoModerator 2011年8月1日 11:00
- 已标记为答案 Behindmoon 2011年8月1日 13:57