wpf控制模板在运行时无法运行

时间:2017-06-10 05:41:45

标签: wpf vb.net visual-studio-2013

在为Wpf窗口创建ControlTemplate后,它在设计视图中正常工作。但是当我跑步时,它没有显示外部的红色边框。

这是我的代码

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
WindowStyle="None"
AllowsTransparency="True"
WindowStartupLocation="CenterScreen"
>
<Window.Resources>
    <Style TargetType="Window">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Window">

                    <Border Padding="20" Background="red">
                        <ContentPresenter Content="{TemplateBinding Content}" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<WindowChrome.WindowChrome>
    <WindowChrome
        ResizeBorderThickness="10"
        CaptionHeight="40"
        CornerRadius="0"
        GlassFrameThickness="0"
        />
</WindowChrome.WindowChrome>

<Grid>
    <Border Background="Black" Padding="20">
        <Button Content="ok"/>
    </Border>
</Grid>
</Window>

enter image description here

运行时没有显示外部红色边框。如果我犯了任何错误,谁能告诉我?

2 个答案:

答案 0 :(得分:0)

在运行时,您的窗口类型为MainWindow,而不是Window,因此样式不适用。

您可以将伴奏的TargetType更改为MainWindow:

<Window xmlns:local="clr-namespace:YourNamespace" ...>
    <Window.Resources>
        <Style TargetType="local:MainWindow">
            ...
        </Style>
    </Window.Resources>
    ...
</Window>

或直接设置Window的Style属性:

<Window ...>
    <Window.Style>
        <Style TargetType="Window">
            ...
        </Style>
    </Window.Style>
    ...
</Window>

或直接设置Template属性:

<Window ...>
    <Window.Template>
        <ControlTemplate TargetType="Window">
            <Border Padding="20" Background="red">
                <ContentPresenter Content="{TemplateBinding Content}" />
            </Border>
        </ControlTemplate>
    </Window.Template>
    ...
</Window>

答案 1 :(得分:0)

只需进行一些小改动就可以了。

 <Window.Resources>
         <Style TargetType="local:MainWindow">
             <Setter Property="Template">
                ...
         </Style>
</Window.Resources>