【发布时间】:2011-09-29 18:36:49
【问题描述】:
我想为我常用的一些 WPF 控件创建一个库,其中一个控件是 CustomWindow,它继承自 Window 类。如何让我的CustomWindow 使用库中定义的默认外观?
我可以替换
<Window x:Class="..." />
与
<MyControls:CustomWindow x:Class="..." />
它适用于窗口行为,但不适用于外观。
编辑
这是我目前所拥有的简化版本:
自定义窗口控件。位于控件库中。
public class CustomChromeWindow: Window
{
static CustomChromeWindow()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomChromeWindow),
new FrameworkPropertyMetadata(typeof(CustomChromeWindow)));
}
}
窗口样式。位于控件库的Themes文件夹中的一个Generic.xaml,一个ResourceDictionary
<Style TargetType="local:CustomChromeWindow">
<Setter Property="WindowStyle" Value="None" />
<Setter Property="Background" Value="Red" />
</Style>
测试窗口。引用控件库的单独项目的启动窗口
<local:CustomChromeWindow
x:Class="MyControlsTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyControls;assembly=MyControls"
Title="MainWindow" Height="350" Width="525"
>
<Grid>
<TextBlock Text="This is a Test" />
</Grid>
</local:CustomChromeWindow>
我最终得到的是一个带有常规 WindowStyle 和黑色背景的窗口。
【问题讨论】:
-
“外观”是什么意思?你在设置属性吗?添加子元素?
-
@Joe White:两者都有。我正在设置一些属性,例如 WindowStyle、Background、MaxHeight 等,并覆盖模板。新模板有自己的标题栏、最小/最大/关闭按钮、圆形菜单按钮等。
-
mdm20 的回答对我有用。我有类似的东西,我将文件移动到另一个项目。 VS2012 不会将 ThemeInfo 语句复制到新项目中。
标签: c# wpf templates window styles