1

我有一个简单的 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 并且窗口的其余部分是黑色的。似乎窗口的内容本身受布局属性的影响。如果我使用 Rectangles 而不是 Borders,则示例工作得很好。谁能解释一下为什么我会看到这种行为(可能与继承有关)?设计时视图和运行时视图之间的区别基本上是VS错误吗?

4

1 回答 1

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 的边框。

于 2013-03-29T11:47:15.847 回答