边界影响窗口的WPF样式

时间:2013-03-29 11:45:05

标签: wpf xaml

我有一个简单的WPF(4.0)示例,旨在展示我在另一个项目中所面临的陌生感。该示例尝试显示一些我使用Border元素的矩形形状。以下是标记:

<Window x:Class="WpfApplication1.Window3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window3" Height="1000" Width="1500">
    <Window.Resources>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="grad">
            <LinearGradientBrush.GradientStops>
                <GradientStop Color="Black" Offset="0"  />
                <GradientStop Color="White" Offset="1"  />
            </LinearGradientBrush.GradientStops>
        </LinearGradientBrush>

        <Style TargetType="Border">
            <Setter Property="Background" Value="{StaticResource grad}" />
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Top" />
            <Setter Property="Width" Value="100" />
            <Setter Property="Height" Value="100" />
            <Setter Property="BorderThickness" Value="1" />
        </Style>

    </Window.Resources>
    <StackPanel Orientation="Horizontal">
        <Border />
        <Border />
        <Border />
    </StackPanel>
</Window>

在设计师中,这看起来就像我想象的那样:屏幕左上方的3个方块彼此相邻。但是在运行时只显示1,窗口的其余部分为黑色。看似窗口的内容本身受布局属性的影响。如果我使用矩形而不是边框​​,样本工作正常。任何人都可以解释为什么我看到这种行为(继承相关可能)?设计时视图和运行时视图之间的区别还基本上是一个VS bug吗?

1 个答案:

答案 0 :(得分:1)

像这样改变:

 <Style TargetType="Border" x:Key="myborder">
        <Setter Property="Background" Value="{StaticResource grad}" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="VerticalAlignment" Value="Top" />
        <Setter Property="Width" Value="100" />
        <Setter Property="Height" Value="100" />
        <Setter Property="BorderThickness" Value="1" />
    </Style>

</Window.Resources>
<StackPanel Orientation="Horizontal">
    <Border Style = {StaticResources myborder}/>
    <Border Style = {StaticResources myborder}/>
    <Border Style = {StaticResources myborder}/>
</StackPanel>

现在可以。

修改 每个Winwow的模板都是一个边框,里面有一个AdornerDecorator。在那个装饰器中有一个ContentPresenter。因此,当您为边框创建默认样式时,它也会影响Window的边框。