我在项目中添加了自定义控件,并将父类型更改为Window。我点击一下按钮即可显示。
我有高度和宽度的样式设置器,但只有xaml中第一个定义的样式才有效。另一个显示大于样式。
任何人都知道这里发生了什么?
在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();
}
答案 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));
}