现在这是我通过使用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" />
不幸的是,这并不能让它看起来流畅……当鼠标从标签移动到控件,或从控件移动到标签时,工具提示消失并重新打开,看起来闪烁.即使标签和控件之间没有间隙,也会出现这种情况,并且看起来不太好.这显然是因为它们是两个独立的工具提示.
我想以某种方式对标签及其相关控件进行分组,并将工具提示显示在该单个组中;这样,当鼠标在两者之间移动时,它可以显得流畅而不会闪烁.不幸的是,我正在努力做到这一点.以下是我尝试过的一些事情……
应用工具提示的空TextBlock和ColumnSpan = 2.
不幸的是,这会阻止控件接收鼠标点击,因为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}" />
此方法似乎有效:只要鼠标位于内部网格上的任何位置,鼠标事件仍会成功传递给控件,工具提示就会出现.不幸的是,这有三个问题:
>它非常混乱,因为我需要为每个标签/控件组合使用许多嵌套网格.
>“自动”列宽不再考虑外部网格中其他控件的宽度,因为这当然是一个单独的网格.
>它似乎忽略了工具提示放置设置,即Placement = Right和PlacementTarget是特定控件.相反,工具提示出现在内部网格下方.
码:
<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>
有没有人想要解决这个问题呢?我只是希望我的工具提示出现在标签和相关控件上,好像它们是一个元素,当鼠标在它们之间移动时没有闪烁.就这样.
解决方法
<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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。