我有一个WPF解决方案,此解决方案包含3个项目: 1-A内部有多个WPF用户控件的项目 2 - 另一个内部有多个WPF用户控件的项目 3-A项目,其中包含上述2个WPF项目的资源。
如您所知,如果您对此类视图有常见设置 - 使用相同的FontFamily。 - 使用相同的FontSize - 使用相同的FontWeight - 为所有用户控件等使用相同的BackroundBrush。您需要在所有usercontrol标签中声明此setter,如下所示:
<UserControl ....
FontFamily="{DynamicResource MyFontFamily}"
FontSize="{DynamicResource MyFontSize}"
FontWeight="{DynamicResource MyFontWeight}"
Background="{DynamicResource MyAppBgBrush2}"
Width="250" d:DesignHeight="350">
<Grid/>......
但我不想在我的所有UserControl中编写相同的setter。出于这个原因,我决定将此属性设置移动到新的c#文件并在资源项目中找到它。
using System.Windows.Controls;
namespace Resources
{
public class PageBase : UserControl
{
public PageBase()
{
SetResourceReference(FontFamilyProperty, "MyFontFamily");
SetResourceReference(FontSizeProperty, "MyFontSize");
SetResourceReference(FontWeightProperty, "MyFontWeight");
SetResourceReference(BackgroundProperty, "MyAppBgBrush2");
}
}
}
所以,在我的资源项目中,我像这样引用了AssemlyInfo.cs文件:
[assembly:System.Windows.Markup.XmlnsDefinition(“http://schemas.sat.com/winfx/2010/xaml/internalresources”,“Resources”)]
此编辑使我能够声明/创建如下所示的用户控件:
<internalresources:PageBase
xmlns:internalresources="http://schemas.sat.com/winfx/2010/xaml/internalresources">
<Grid>DoWhatEver<Grid/>
<internalresources:PageBase/>
从现在开始,我不必创建其标签开头的usercontrol视图
<UserControl....
,我可以从<internalresources:PageBase
开始......
我的问题是,VisualStudio 2010可以向我展示我所有用户控件的设计表达式混合不能。有趣的是,在VS和Blend中,我的项目编译没有任何错误但是当我尝试在混合中打开我的视图时它说:
- 名称空间“PageBase”在名称空间“http://schemas.sat.com/winfx/2010/xaml/internalresources”
中不存在P.S:引用被正确添加到我的项目中,我的项目适合用混合打开。