【发布时间】:2021-02-21 21:29:09
【问题描述】:
我在 Visual Studio 2019 中有一个解决方案,由一些使用 WPF .NET 5 构建为 DLL 的项目组成。
现在我需要在其中一个项目中创建一些 UserControls,我将在未来的 WPF .NET 5 应用程序中加载它们,但问题是 XAML 设计器无法使用 @ 预览 UserControl 987654323@ 在外部ResourceDictionary 中。
我简化了代码:
<UserControl.Resources>
<Style x:Key="sButton" TargetType="Button">
<Setter Property="BorderBrush" Value="{StaticResource color_UC_BorderBrush}"/>
</Style>
</UserControl.Resources>
只有 DLL 我没有 Application 与共享的 ResourceDictionary 和 color_UC_BorderBrush 无法解析以供预览。
通过以下方式,XAML 设计器可以正常工作,但我不希望每个 UserControl 每次都加载自己的 ResourceDictionary:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyLib;component/ResourceDictionaries/myRD.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="sButton" TargetType="Button">
<Setter Property="BorderBrush" Value="{StaticResource color_UC_BorderBrush}"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
在我未来的 WPF .NET 5 应用程序中,我将使用共享的 ResourceDictionary,但现在 我怎样才能设法让 XAML 设计器在 DLL 中正常工作,或者我怎样才能使 MergedDictionary 在XAML 可忽略?
也许还有其他我没有想到的方法。谢谢。
【问题讨论】:
-
我没有针对您的特定用例的解决方案。因为这对我来说似乎不是问题。
UserControl库不应该有自己的默认视觉属性吗?为客户端代码提供一种机制来覆盖这些属性似乎很好,但是为什么要强制它们呢?为所有内容提供默认值将简化您的生活(因为上述问题消失了)以及客户端代码作者的生活(因为他们只需要在关心它们时提供可视属性)。 -
@PeterDuniho “默认值”是什么意思?现在我在考虑
StaticResource color_UC_BorderBrush作为默认值,所以如果我想改变多个控件的多个属性的值我可以简单地编辑资源值,是不是错了? -
我的意思是您的设计似乎需要 客户端 为画笔提供值,即使客户端代码并不关心使用什么颜色。将此与除您自己的代码之外的库发布的所有其他 UI 元素进行对比,其中如果需要某种颜色,则无需您额外努力即可提供默认颜色。
TextBlock是否要求您提供前景画笔?Button是否要求您提供背景、边框、焦点高亮等画笔?不,他们没有。如果您愿意,您可以取代它们,但您没有必须这样做。
标签: wpf xaml visual-studio-2019 .net-5