我正在尝试在WPF中开始构建自定义窗口。我以为我已经准备好了所有的起始部件,但到目前为止,我得到的只是一个黑色内容的常规窗口。我认为这是因为它没有将我的模板识别为控件的默认模板。
你能告诉我我错过的东西吗?这是我的代码:
namespace BaseWindowLibrary
{
public class BaseWindow: Window
{
public BaseWindow()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseWindow),
new FrameworkPropertyMetadata(
typeof(BaseWindow)));
}
}
}
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:base="clr-namespace:BaseWindowLibrary">
<ControlTemplate x:Key="BaseWindowTemplate" TargetType="{x:Type base:BaseWindow}">
<Border BorderBrush="Blue" BorderThickness="3" Background="Coral" Width="100" Height="100"/>
</ControlTemplate>
<Style TargetType="{x:Type base:BaseWindow}">
<Setter Property="Template" Value="{StaticResource BaseWindowTemplate}"/>
</Style>
</ResourceDictionary>
答案 0 :(得分:3)
您是在generic.xaml
或其他资源词典中定义此xaml代码,然后在generic.xaml
合并它?
要求将样式设为默认样式。
另外,如果您一直手动添加内容,请检查VS是否ThemeInfo
中的AssemblyInfo.cs
属性。
如果这不起作用,您应该在声明您使用的窗口的地方发布代码(window.xaml
中的部分或您使用的名称)。
修改
为了澄清,generic.xaml必须位于解决方案的Themes文件夹中,并包含(直接或间接)样式的代码。
答案 1 :(得分:1)
您似乎没有将ResourceDictionary包含在您的应用程序中。将其添加到App.xaml
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="YourResource.xaml" />
</ResourceDictionary.MergedDictionaries>
根据评论更新: 我试过这个BaseWindow:Window作为一个自定义控件,它只是起作用。 Style将位于自定义控件库的Generic.XAML中。