WPF 功能区工具提示闪烁

WPF Ribbon ToolTip flickers

我的工具提示中有一个与下拉项相关的非常奇怪的行为。

我发布了一个视频,因为它更容易看到 https://imgur.com/a/RxFvAPP

我的 XAML 看起来像这样

 <RibbonGroup x:Name="PageRibbonGroup" Header="{x:Static p:Resources.Page_Ribbon_Group}" LargeImageSource="{svgc:SvgImage Source='pack://application:,,,/Resources/HomeTab/Page/page_group.svg'}">
                        <RibbonComboBox>
                            <RibbonGallery x:Name="PagesListComboboxGallery" SelectedItem="{Binding XPath=.}" MaxColumnCount="1">
                                <RibbonGalleryCategory  x:Name="PagesListComboboxGalleryCategory" ItemsSource="{Binding}"/>
                                <RibbonGallery.ToolTip>                                       
                                    <ToolTip Placement="Bottom" Content="ASDF" ToolTipService.ShowDuration="5000"/>
                                </RibbonGallery.ToolTip>
                            </RibbonGallery>
                        </RibbonComboBox>
 </RibbonGroup>

根据我在下拉列表中的元素上的每个工具提示上看到的情况,会发生这种情况。

我找不到发生这种情况的原因。

我还创建了一个回购协议 https://github.com/SebiCiuca/RibbonToolTipFlicker

对于组合框和下拉按钮,您可以重现此行为,但对于 Button3,工具提示工作正常。

https://github.com/dotnet/wpf/pull/6063/files

看起来像是版本 6.0.3 中引入的 WPF 错误,应该在 .NET 6.0.5 中修复

此行为不会在 .NET 5 或 .NET 6.0.2 中重现。

如果您正在寻找绕过该错误的解决方法,就像我一样,您可以将您的项目重新定位到 .NET 5.0。继续使用 .NET 6.0 的另一种方法是将您的 start-up 项目发布为 self-contained 部署并将 RuntimeFrameworkVersion 设置为 6.0.2.

配置项目

这就是您在 Visual Studio 2022 年内可以做到的:

  1. 在菜单中单击 构建发布选择
  2. 在向导中点击+新建,select文件夹,点击下一步文件夹,然后再次 下一个
  3. 为发布过程的输出选择一个文件夹,然后单击 完成
  4. 在发布配置文件的设置面板底部,单击显示所有设置
  5. 在对话框select中将部署模式设置为Self-contained并点击保存 按钮。发布配置文件应类似于下图。

  1. 接下来,您需要手动编辑 .csproj。使用 VSCode 或 Notepad++ 等文本编辑器最容易做到这一点,但即使是 built-in Windows 记事本也应该做到这一点。
  2. 打开“.csproj”文件后,在 <TargetFramework>net6.0-windows</TargetFramework> 标签下方的 XML 标签处保存项目:
    <RuntimeFrameworkVersion>6.0.2</RuntimeFrameworkVersion>
  1. Return 到 Visual Studio,单击 发布,完成后,单击 打开文件夹 link.

您现在可以在发布文件夹中找到并 运行 .exe 文件,它应该 运行 您的应用程序使用 .NET 6.0.2 而不是当前最新的 6.0.3 和工具提示错误不应再存在。如果您仍然看到错误并且您不确定是否正确地重新定位了您的项目,您可以安排显示 System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription 的值,该值应该 return 值“.NET 6.0.2 " 如果操作正确。

请注意,如果您 运行 来自通常的 bin\Releasebin\Debug 目录的项目(就像 运行 来自 Visual Studio 的项目一样)它将使用当前版本的任何内容。只有已发布的应用程序才会使用以前的版本。如果要使用 .NET 6.0.2 运行time.

测试项目,则还需要记住在更改代码时重新发布项目

一旦 .NET 6.0.5 发布并且您想要使用新版本发布您的应用程序,只需通过从 .csproj 文件中删除 RuntimeFrameworkVersion 元素来反转上面的步骤 6。