我有一个控件网格,每个可编辑的控件(复选框,组合框等)都有一个关联的标签。我想在标签及其控件之间共享工具提示。
现在这是我使用BindableToolTips完成的事情:我只是在我的XAML资源中定义ToolTip,然后在标签和控件上单独设置相同的ToolTip对象。
代码:
<TextBlock Grid.Row="0"
Grid.Column="0"
ToolTipService.PlacementTarget="{Binding ElementName=ExampleControl}"
Utilities:ToolTipServiceExtended.BindableToolTip="{StaticResource ExampleControlTT}"
Text="Example label:" />
<CheckBox Grid.Row="0"
Grid.Column="1"
x:Name="ExampleControl"
Utilities:ToolTipServiceExtended.BindableToolTip="{StaticResource ExampleControlTT}"
Content="Example" />
不幸的是,这并没有使它看起来流畅......当鼠标从标签移动到控件,或从控件移动到标签时,工具提示消失并重新打开,看起来闪烁。即使标签和控件之间没有间隙,也会出现这种情况,并且看起来不太好。这显然是因为它们是两个独立的工具提示。
我想以某种方式对标签及其相关控件进行分组,并在该单个组中显示工具提示;这样,当鼠标在两者之间移动时,它可以显得流畅而不会闪烁。不幸的是,我正在努力做到这一点。以下是我尝试过的一些事情......
应用工具提示并使用ColumnSpan = 2清空TextBlock。
不幸的是,这会阻止控件接收鼠标点击,因为TextBlock会无形地覆盖它。我已经尝试将IsHitTestVisible设置为false,但是这会阻止它接收鼠标悬停事件,这会阻止工具提示出现。如果我可以让鼠标点击空的TextBlock,但TextBlock仍然将鼠标悬停在事件上,那么它将是完美的。
代码:
<TextBlock Grid.Row="0"
Grid.Column="0"
Text="Example label:" />
<CheckBox Grid.Row="0"
Grid.Column="1"
x:Name="ExampleControl"
Content="Example" />
<TextBlock Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
ToolTipService.PlacementTarget="{Binding ElementName=ExampleControl}"
Utilities:ToolTipServiceExtended.BindableToolTip="{StaticResource ExampleControlTT}" />
专门针对一个标签和一个控件的嵌套网格。
此方法似乎有效:只要鼠标位于内部网格上的任何位置,鼠标事件仍会成功传递给控件,工具提示就会出现。不幸的是,这有三个问题:
如果可以解决最后两个问题,那么这将是一个可接受的解决方案。
代码:
<Grid Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
ToolTipService.PlacementTarget="{Binding ElementName=ExampleControl}"
Utilities:ToolTipServiceExtended.BindableToolTip="{StaticResource ExampleControlTT}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0"
Grid.Column="0"
Text="Example label:" />
<CheckBox Grid.Row="0"
Grid.Column="1"
x:Name="ExampleControl"
Content="Example" />
</Grid>
有没有人对这个问题有一个好的解决方案?我只是希望我的工具提示出现在标签和相关控件上,好像它们是一个元素,当鼠标在它们之间移动时没有闪烁。就是这样。
答案 0 :(得分:1)
将控件包装在内容展示器中,并将工具提示附加到该文件。
<Window x:Class="StackOverflowWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ContentPresenter ToolTip="Blah">
<ContentPresenter.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Example label:"/>
<CheckBox Grid.Column="1" x:Name="ExampleControl" Content="Example" />
</Grid>
</ContentPresenter.Content>
</ContentPresenter>
</Window>