gpt4 book ai didi

c# - 我怎样才能给一组控件一个工具提示,并让它顺利显示?

转载 作者:行者123 更新时间:2023-11-30 12:50:55 26 4
gpt4 key购买 nike

我有一个控件网格,其中每个可编辑控件(复选框、组合框等)都有一个关联的标签。我想在标签及其控件之间共享工具提示。

现在这是我使用 BindableToolTips 完成的事情: 我只是在我的 XAML 资源中定义工具提示,然后在标签和控件上分别设置相同的工具提示对象。

代码:

<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}" />

嵌套网格专门用于一个标签和一个控件。

此方法似乎有效:只要鼠标位于内部网格上的任何位置,工具提示就会出现,并且鼠标事件仍会成功传递给控件。不幸的是,这有三个问题:

  1. 这非常困惑,因为每个标签/控件组合都需要许多嵌套网格。
  2. “自动”列宽不再考虑外部网格中其他控件的宽度,因为这当然是一个单独的网格。
  3. 它似乎忽略了工具提示放置设置,即 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>

关于c# - 我怎样才能给一组控件一个工具提示,并让它顺利显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com