WPF - 自定义窗口无法正常工作

时间:2009-07-13 18:12:24

标签: wpf custom-controls

我正在尝试在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>

2 个答案:

答案 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中。

相关问题