将样式/模板应用于Window后,无法在WPF窗口中看到控件

时间:2017-06-19 21:20:49

标签: c# wpf xaml styles

我为我的应用程序Windows创建了一个自定义模板。它在App.xaml

PING

在我的MainWindow.xaml中,我已经应用了这样的风格(并且它有效):<Application.Resources> <ResourceDictionary> <Style x:Key="XWindow" TargetType="{x:Type Window}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate > <Border BorderThickness="3"> <Border.Effect> <DropShadowEffect BlurRadius="5" Direction="270" RenderingBias="Quality" ShadowDepth="0.5" Opacity="0.8" Color="#FF00B9FF"/> </Border.Effect> <Grid Background="White"> <local:ControlButtons Height="38" VerticalAlignment="Top" HorizontalAlignment="Right"/> <Border BorderBrush="#99007CF7" BorderThickness="1"/> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary> </Application.Resources>

因此样式应用于窗口。但是当我在窗口中放置一个控件时,我看不到它甚至选择它。这是在XAML代码中,但即使我调试它不在窗口上......任何人都有线索?

有截图: XAML Problem

当我添加一个简单的按钮时,通常应该这样做:XAML Norrmal

1 个答案:

答案 0 :(得分:0)

正如@Clemens所指出,您忘记在ContentPresenter添加ControlTemplate。这是显示窗口的实际内容的地方。

您还应该记得将ContentPresenter放在AdornedDecorator

<Style x:Key="XWindow" TargetType="{x:Type Window}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Window}">
                <Border BorderThickness="3">
                    <Border.Effect>
                        <DropShadowEffect BlurRadius="5" Direction="270" RenderingBias="Quality" ShadowDepth="0.5" Opacity="0.8" Color="#FF00B9FF"/>
                    </Border.Effect>
                    <Grid Background="White">
                        <local:ControlButtons Height="38" VerticalAlignment="Top" HorizontalAlignment="Right"/>
                        <Border BorderBrush="#99007CF7" BorderThickness="1">
                            <AdornerDecorator>
                                <ContentPresenter/>
                            </AdornerDecorator>
                        </Border>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

AdornedDecorator指定AdornerLayer在可视树中的位置,如MSDN中所述:http://msdn.microsoft.com/en-us/library/system.windows.documents.adornerdecorator.aspx。例如,如果您打算在窗口中显示任何验证错误,则需要一个,因为验证错误会显示在装饰层上。

修改:您还应该设置TargetType的{​​{1}}属性:

ControlTemplate