标题解释了最终目标。
现在的问题是我甚至无法通过一次点击更改工具提示。
我的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做到这一点?
答案 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
}