c# – 如何为一组控件提供单个工具提示,并使其显示顺畅?

c# – 如何为一组控件提供单个工具提示,并使其显示顺畅?,第1张

概述我有一个控件网格,每个可编辑的控件(复选框,组合框等)都有一个关联的标签.我想在标签和它的控件之间共享工具提示. 现在这是我通过使用BindableToolTips完成的事情:我只是在我的XAML资源中定义ToolTip,然后在标签和控件上单独设置相同的ToolTip对象. 码: <TextBlock Grid.Row="0" Grid.Column="0" 我有一个控件网格,每个可编辑的控件(复选框,组合框等)都有一个关联的标签.我想在标签和它的控件之间共享工具提示.

现在这是我通过使用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>
总结

以上是内存溢出为你收集整理的c# – 如何为一组控件提供单个工具提示,并使其显示顺畅?全部内容,希望文章能够帮你解决c# – 如何为一组控件提供单个工具提示,并使其显示顺畅?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存