gpt4 book ai didi

wpf - 在 WPF 用户控件库中指定样式

转载 作者:行者123 更新时间:2023-12-02 05:25:01 24 4
gpt4 key购买 nike

我在不同项目之间共享通用样式时遇到一些问题。这是我的项目:-

  • “Common” - 包含常见 WPF 样式的类库。
  • “插件” - 包含用户控件(不是自定义控件)的类库。
  • “核心应用程序”- 核心 WPF 应用程序,显示“插件”中定义的用户控件。

“通用”和“核心应用程序”驻留在同一解决方案中,而“插件”则位于其自己的解决方案中。

“核心应用程序”项目中的样式工作正常 - 它引用“公共(public)”项目并在 App.xaml 中具有以下内容:-

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/MyStyles.xaml" />
</ResourceDictionary.MergedDictionaries>

在“核心应用程序”项目中编辑 XAML 文件时,我获得了样式名称的智能感知,没有波浪下划线,并且在运行时一切都工作正常。

问题出在“插件”项目上。我引用了“Common”程序集,并创建了一个\Themes\Generic.xaml 文件,其中包含与上面相同的合并 XAML。 Generic.xaml 具有“Page”构建操作,我已将以下内容添加到 AssemblyInfo.cs:-

[assembly: ThemeInfo(ResourceDictionaryLocation.None, 
ResourceDictionaryLocation.SourceAssembly)]

当我在此“插件”项目中编辑用户控件的 XAML 时,“通用”程序集中的样式不会显示在智能感知中,并且 VS/Resharper 在其名称下放置一条波浪线。我什至直接向 Generic.xaml 添加了样式,但 UC 也看不到。用户控件看起来像这样:-

<UserControl ..blah..>
<StackPanel>
<TextBlock Style="{StaticResource AStyleInCommonAssembly}" Text="Hello"/>
<TextBlock Style="{StaticResource AStyleInGenericXaml}" Text="World"/>
</StackPanel>
</UserControl>

在运行时,WPF 确实正确应用驻留在“Common”程序集中的样式(我猜它是由于 App.xaml 中的字典合并而找到它们的)。但是它仍然无法找到我直接添加到 Generic.xaml 的样式。

我错过了什么?这种方法是否仅适用于自定义控件,而不适用于我正在处理的用户控件?我的首要任务是让事情在运行时正常工作,但获得设计时/智能感知体验将是一个额外的好处。

最佳答案

已解决。看来使用 generic.xaml 的技术仅适用于自定义控件,而不适用于用户控件。用户控件无法访问 generic.xaml 中定义的样式(直接或从另一个程序集合并)。

意识到这一点后,我只是回去将外部程序集资源字典合并到用户控件本身中,即:

<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/MyStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

在每个 UC 中都执行此操作并不理想,但我可以在我的场景中接受它,因为在这些“插件”项目中我只会有一个或两个。

在这样做的过程中,我确实发现了另一个问题,以下内容可能会对将来的某人有所帮助。我的“Common”程序集中的 MyStyles.xaml 文件不包含自己的样式 - 它只是合并该程序集中的许多其他资源字典。这样做是为了方便,这意味着使用者只需合并 MyStyles.xaml,而不是该程序集中的十几个单独的 XAML。

事实证明,WPF 中存在一个错误,即“嵌套”合并字典无法正确解析。我发现如果我直接将样式放入 MyStyles.xaml,用户控件找到它。但是,它拒绝识别 MyStyles.xaml 合并的字典中的任何样式!我现在已经删除了 MyStyles.xaml,并返回合并到各个字典中(从用户控件 XAML 中) - 在设计时和运行时一切正常。

关于wpf - 在 WPF 用户控件库中指定样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730441/

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