仅使用XAML切换Button控件的工具提示

时间:2010-09-02 19:26:16

标签: silverlight xaml

标题解释了最终目标。

现在的问题是我甚至无法通过一次点击更改工具提示。

我的XAML是:

<Button x:Name="btn" Height="24" Margin="107,59,109,0" VerticalAlignment="Top">
    <ToolTipService.ToolTip>
        <TextBlock>Hi</TextBlock>
    </ToolTipService.ToolTip>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=btn}" PropertyName="ToolTipService.ToolTip" Value="Jeroen"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <Image x:Name="icon" Height="16" Source="Images/FaceSad.png" Stretch="Fill" Width="16"/>
</Button>

我正在为一个专门在XAML工作的设计师这样做,我不想使用C#。那可能吗?有没有人知道如何使用XAML触发器和EventTriggers做到这一点?

2 个答案:

答案 0 :(得分:3)

ChangePropertyAction是一个相当简单的对象,它实际上寻找一个名为“ToolTipService.ToolTip”的公共属性。它不会解析此名称以确定它是一个附加属性。

您的代码目前依赖于工具提示服务为您创建Tooltip控件,但如果您自己创建一个,则可以为其指定可以引用的名称。然后,您可以操纵其Content属性。像这样: -

<Button x:Name="btn" Height="24" Margin="107,59,109,0" VerticalAlignment="Top">
    <ToolTipService.ToolTip>
        <ToolTip x:Name="btnToolTip">
          <TextBlock>Hi</TextBlock>
        </ToolTip>
    </ToolTipService.ToolTip>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:ChangePropertyAction TargetObject="{Binding ElementName=btnToolTip}" PropertyName="Content">
              <ei:ChangePropertyAction.Value>
                <TextBlock>Jeroen</TextBlock>
              </ei:ChangePropertyAction.Value>
            </ei:ChangePropertyAction>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <Image x:Name="icon" Height="16" Source="Images/FaceSad.png" Stretch="Fill" Width="16"/>
</Button>

答案 1 :(得分:0)

同样注意:

这并没有帮助我实现标题中所述的目标,我最终做的是:

首先,在UserControl上我添加了:

< ... ToolTipService.ToolTip="Happy" Tag="Happy|Sad" MouseLeftButtonUp="ToolTipSwitch" />

然后,我的代码背后有这个功能:

    private void ToolTipSwitch(object sender, RoutedEventArgs e)
    {
        // ...
        // Whatever is in the code for a MouseButtonUp
        // ...

        #region ToolTip switch code

        UserControl tooltipParent = sender as UserControl;
        Char[] pipe = {'|'};
        String[] tooltips = tooltipParent.Tag.ToString().Split(pipe, StringSplitOptions.None);
        if (ToolTipService.GetToolTip(tooltipParent).ToString() == tooltips[0])
            ToolTipService.SetToolTip(tooltipParent, tooltips[1]);
        else if (ToolTipService.GetToolTip(tooltipParent).ToString() == tooltips[1])
            ToolTipService.SetToolTip(tooltipParent, tooltips[0]);

        #endregion ToolTip switch code
    }