我有一个简单的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吗?
答案 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的边框。