检查以下场景(其他情况也可能适用)[您可以创建项目,只需将代码复制粘贴到正确的文件中]:
a - 创建一个包含基本内容的 ResourceDictionary (Resources.xaml):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="Red" x:Key="Test" />
<Style TargetType="{x:Type GroupBox}" x:Key="Test2" >
<Setter Property="Background" Value="Blue" />
</Style>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="Foreground" Value="Green" />
</Style>
</ResourceDictionary>
b - 创建一个用户控件库,其他人将在其中继承包含基本资源 (UserControlBase.cs):
using System.Windows.Controls;
using System;
using System.Windows;
namespace ResourceTest
{
public class UserControlBase : UserControl
{
public UserControlBase()
{
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ResourceTest;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}
}
}
c - 创建一个继承自基础 (UserControl1.xaml) 的 UserControl:
<ResourceTest:UserControlBase x:Class="ResourceTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ResourceTest="clr-namespace:ResourceTest"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300" >
<Grid>
<GroupBox BorderBrush="{StaticResource Test}" Margin="3" Header="Test" Style="{DynamicResource Test2}" >
<TextBlock Text="TESTTEST" />
</GroupBox>
</Grid>
</ResourceTest:UserControlBase>
结果:StaticResources 未解析(并且未加载 Test BorderBrush)。DynamicResources 已解决(背景为蓝色),但设计器说它无论如何都找不到资源(第一次工作正常,但是当您打开/关闭设计器时,无法解析资源)。像 TextBlock 样式这样的非命名资源可以正常工作。
这是设计师的错误还是我做错了什么?在资源永远不会改变的情况下,是否必须将资源声明为动态的?
提前致谢。