我有一个ToolTip的以下样式:
<Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<StackPanel Orientation="Horizontal">
<StackPanel.ToolTip>
<ToolTip Visibility="Hidden" />
</StackPanel.ToolTip>
<ContentPresenter />
<Image Source="/Resources/info.png"
ToolTip="{TemplateBinding ToolTip}"
Height="12"
VerticalAlignment="Top" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
通过以下方式调用:
<ContentControl Style="{StaticResource ToolTipPopUp}" ToolTip="Hello world">
<CheckBox Content="I am a check box" />
</ContentControl>
这允许我将ToolTip
附加到我想要的任何控件上,并按预期显示ToolTip
。
客户现在要求在弹出窗口中显示ToolTip
,因为内容有时会相当冗长。
有没有办法将此样式转换为显示弹出窗口?我已经读过Window
ContentControl
无法使用 private Window _toolTipWindow;
/// <summary>
/// Display the tool tip text in a new window
/// </summary>
public void ToolTipPopUpClicked(object sender, RoutedEventArgs e)
{
if (_toolTipWindow == null || !_toolTipWindow.IsVisible)
{
_toolTipWindow = new Window();
}
String _instructions = (((Button)sender).TemplatedParent as ContentControl).ToolTip.ToString();
_toolTipWindow.Width = 300;
_toolTipWindow.Height = 200;
_toolTipWindow.Content = _instructions;
_toolTipWindow.Show();
}
,所以如果有不同的方法,我会对此持开放态度。
修改
我有一个静态资源的指令(为了清楚起见未显示),我绑定到ToolTip(这就是我现在正在做的)。我正在考虑创建一个单独的窗口,当用户点击工具提示图标(蓝色&#39; i&#39;)时,该窗口会打开,只要有时间,就会更新弹出窗口中的属性(即工具提示内容)单击工具提示图标(因此,如果窗口已打开,则窗口中的说明会更改)。然后用户可以在选择时关闭窗口。
解
感谢Theodosius指出我正确的方向。以下是我实现此方法的方法:
MainPageViewModel.cs(执行程序的最顶层窗口):
<Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<StackPanel Orientation="Horizontal">
<ContentPresenter />
<Button Width="Auto">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}},
Path=DataContext}"
MethodName="ToolTipPopUpClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Button.Template>
<ControlTemplate>
<Image Source="Resources/info.png"
ToolTip="{TemplateBinding ToolTip}"
Height="12"
VerticalAlignment="Top" >
</Image>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
StylesDictionary.xaml
<ContentControl Name="PopupExample"
Style="{StaticResource ToolTipPopUp}"
ToolTip="Hello world">
<CheckBox Content="I am a check box" />
</ContentControl>
XAML文件
ToolTip
这保留了标准{{1}}功能,并在用户点击工具提示图标(蓝色&#39; i&#39;)时提供弹出窗口。
答案 0 :(得分:-1)
<Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<StackPanel Orientation="Horizontal">
<StackPanel.ToolTip>
<ToolTip Visibility="Hidden" />
</StackPanel.ToolTip>
<ContentPresenter />
<Image Source="/info.png"
ToolTip="{TemplateBinding ToolTip}"
Height="12"
VerticalAlignment="Top" >
<Image.Style>
<Style>
<EventSetter Event="Mouse.MouseEnter" Handler="Show_PopupToolTip" />
<EventSetter Event="Mouse.MouseLeave" Handler="Hide_PopupToolTip"/>
</Style>
</Image.Style>
</Image>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
代码隐藏...
Window win;
private void Show_PopupToolTip(object sender, MouseEventArgs e)
{
var fred = ((Image)sender).TemplatedParent;
if (fred != null)
{
ContentControl c = fred as ContentControl;
string myText = c.ToolTip.ToString();
if (!String.IsNullOrEmpty(myText))
{
if (win == null || !win.IsVisible)
win = new Window();
win.Height = 275;
win.Width = 275;
win.Content = myText;
win.Show();
}
}
}
private void Hide_PopupToolTip(object sender, MouseEventArgs e)
{
//if (win != null)
//{
// win.Close();
//}
}