none
无法在trigger中setter自定义的依赖属性?? RRS feed

  • 问题

  • <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 一运行就报错

    2011年8月1日 7:40

答案

  • 你用的控件是 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.

    2011年8月1日 10:59
    版主

全部回复

  • 你用的控件是 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.

    2011年8月1日 10:59
    版主
  • 原来如此,感谢解惑!
    2011年8月1日 13:59