Window风格和放大器的奇怪行为Xaml到资源部分

时间:2017-09-08 04:33:53

标签: c# wpf

我有一个这样的课程:

public class MyWindow : Window
{
    static MyWindow()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyWindow), new FrameworkPropertyMetadata(typeof(MyWindow)));
    }
}

我的MainWindow.xaml看起来像这样:

<Window.Resources>

    <Style TargetType="{x:Type local:MyWindow}">
        <Setter Property="Title" Value="Test" />
        <Setter Property="Background" Value="Green" />
    </Style>

</Window.Resources>

<Grid>
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="215,124,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
</Grid>

我没有将它包括在内以保持简洁,但是button_Click方法只是新的MyWindow并且在它上面做了Show()。

的问题:

  1. VS2015设计师显示MAIN窗口的背景(即 仍然是一个窗口,而不是一个MyWindow)绿色,但不会改变 标题。 MAIN窗口在运行时不显示绿色,所以我不确定设计师为什么要选择它。
  2. 按钮处理程序显示的MyWindow没有 得到它的标题集,背景为黑色/未初始化。
  3. 有没有办法使用像我正在尝试的资源字典来定义窗口?我正在尝试这样做,因此我的控件用户(需要主机窗口)可以根据需要自定义主机窗口。

1 个答案:

答案 0 :(得分:1)

以下代码表示窗口具有默认样式:

static MyWindow()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyWindow), new FrameworkPropertyMetadata(typeof(MyWindow)));
}

此默认样式应在名为“generic.xaml”的资源字典中定义,该字典位于项目根目录中名为“Themes”的文件夹中。这些名称按惯例。所以你应该把你的风格移到Themes/Generic.xaml。您可能还希望将样式基于默认样式:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfApplication7">
    <Style TargetType="{x:Type local:MyWindow}" BasedOn="{StaticResource {x:Type Window}}">
        <Setter Property="Title" Value="Test" />
        <Setter Property="Background" Value="Green" />
    </Style>
</ResourceDictionary>

如何在WPF中创建自定义窗口: https://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/