自定义窗口上忽略高度设置器

时间:2017-05-25 15:58:54

标签: wpf xaml

我在项目中添加了自定义控件,并将父类型更改为Window。我点击一下按钮即可显示。

我有高度和宽度的样式设置器,但只有xaml中第一个定义的样式才有效。另一个显示大于样式。

任何人都知道这里发生了什么?

enter image description here

在generic.xaml中:

<Style TargetType="{x:Type local:ChildWindow}">
    <Setter Property="Width" Value="300"/>
    <Setter Property="Height" Value="300"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ChildWindow}">
                <TextBlock Background="White">Child window</TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

ChildWindow.cs是默认值,除了父级现在是&#34; Window&#34;:

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

MainWindow.xaml.cs显示了ChildWindow:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var childWindow = new ChildWindow();
    childWindow.Show();
}

1 个答案:

答案 0 :(得分:1)

解决方法: 我还没有找到为什么它的行为,或者如何使样式设置器工作,但解决方法是摆脱样式设置器并设置Width和Height依赖项属性的默认值。我在静态构造函数中做到了这一点:

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

    // Get rid of the style setters and add this:
    WidthProperty.OverrideMetadata(typeof(ChildWindow), new FrameworkPropertyMetadata(300.0));
    HeightProperty.OverrideMetadata(typeof(ChildWindow), new FrameworkPropertyMetadata(300.0));
}