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 年内可以做到的:
- 在菜单中单击 构建 → 发布选择。
- 在向导中点击+新建,select文件夹,点击下一步 和 文件夹,然后再次 下一个。
- 为发布过程的输出选择一个文件夹,然后单击 完成。
- 在发布配置文件的设置面板底部,单击显示所有设置。
- 在对话框select中将部署模式设置为Self-contained并点击保存 按钮。发布配置文件应类似于下图。
- 接下来,您需要手动编辑 .csproj。使用 VSCode 或 Notepad++ 等文本编辑器最容易做到这一点,但即使是 built-in Windows 记事本也应该做到这一点。
- 打开“.csproj”文件后,在
<TargetFramework>net6.0-windows</TargetFramework>
标签下方的 XML 标签处保存项目:
<RuntimeFrameworkVersion>6.0.2</RuntimeFrameworkVersion>
- Return 到 Visual Studio,单击 发布,完成后,单击 打开文件夹 link.
您现在可以在发布文件夹中找到并 运行 .exe 文件,它应该 运行 您的应用程序使用 .NET 6.0.2 而不是当前最新的 6.0.3 和工具提示错误不应再存在。如果您仍然看到错误并且您不确定是否正确地重新定位了您的项目,您可以安排显示 System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
的值,该值应该 return 值“.NET 6.0.2 " 如果操作正确。
请注意,如果您 运行 来自通常的 bin\Release
或 bin\Debug
目录的项目(就像 运行 来自 Visual Studio 的项目一样)它将使用当前版本的任何内容。只有已发布的应用程序才会使用以前的版本。如果要使用 .NET 6.0.2 运行time.
测试项目,则还需要记住在更改代码时重新发布项目
一旦 .NET 6.0.5 发布并且您想要使用新版本发布您的应用程序,只需通过从 .csproj 文件中删除 RuntimeFrameworkVersion
元素来反转上面的步骤 6。
我的工具提示中有一个与下拉项相关的非常奇怪的行为。
我发布了一个视频,因为它更容易看到 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 年内可以做到的:
- 在菜单中单击 构建 → 发布选择。
- 在向导中点击+新建,select文件夹,点击下一步 和 文件夹,然后再次 下一个。
- 为发布过程的输出选择一个文件夹,然后单击 完成。
- 在发布配置文件的设置面板底部,单击显示所有设置。
- 在对话框select中将部署模式设置为Self-contained并点击保存 按钮。发布配置文件应类似于下图。
- 接下来,您需要手动编辑 .csproj。使用 VSCode 或 Notepad++ 等文本编辑器最容易做到这一点,但即使是 built-in Windows 记事本也应该做到这一点。
- 打开“.csproj”文件后,在
<TargetFramework>net6.0-windows</TargetFramework>
标签下方的 XML 标签处保存项目:
<RuntimeFrameworkVersion>6.0.2</RuntimeFrameworkVersion>
- Return 到 Visual Studio,单击 发布,完成后,单击 打开文件夹 link.
您现在可以在发布文件夹中找到并 运行 .exe 文件,它应该 运行 您的应用程序使用 .NET 6.0.2 而不是当前最新的 6.0.3 和工具提示错误不应再存在。如果您仍然看到错误并且您不确定是否正确地重新定位了您的项目,您可以安排显示 System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
的值,该值应该 return 值“.NET 6.0.2 " 如果操作正确。
请注意,如果您 运行 来自通常的 bin\Release
或 bin\Debug
目录的项目(就像 运行 来自 Visual Studio 的项目一样)它将使用当前版本的任何内容。只有已发布的应用程序才会使用以前的版本。如果要使用 .NET 6.0.2 运行time.
一旦 .NET 6.0.5 发布并且您想要使用新版本发布您的应用程序,只需通过从 .csproj 文件中删除 RuntimeFrameworkVersion
元素来反转上面的步骤 6。