小编pfw*_*pfw的帖子

StackPanel中的网格:为什么auto和*表现得很奇怪?

我的google和stackoverflow search-fu让我失望了,所以我向社区提出了这个问题.

(这是使用VS2010和.NET 4.0生成的,在一个空白的默认WPF解决方案中)

考虑以下XAML:

<StackPanel Orientation="Horizontal">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2" 
                    Background="Red" Width="200"/>
        <Border Name="aborder2" Background="Green"/>

    </Grid>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

你会预测"aborder2"的宽度是多少?

如果你猜到"20像素",你就错了.正确的答案是110像素.

考虑一下这个XAML:

    <StackPanel Orientation="Horizontal">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2" 
                    Background="Red" Width="200"/>
        <Border Name="aborder2" Background="Green"/>

    </Grid>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

你会预测"aborder2"的宽度是多少?

如果你猜到20像素或110像素,你就错了.正确答案是200像素.

我无法弄明白这一点,这让我感到疯狂.似乎答案应该是显而易见的; 显然,自动填充网格列和堆栈面板之间存在一些相互作用,导致网格发生故障.但它似乎没有意义 - 无论规则如何,这种行为似乎都是武断的.为何110像素?为什么不是109像素或100像素?我会理解,如果自动调整大小的列无法完全展开或者某些东西,但是为了让固定宽度列随机忽略它的宽度,我会给开发人员留下一个烧焦的外壳.

任何帮助或指导灯将非常感谢!

wpf grid width stackpanel

10
推荐指数
1
解决办法
7359
查看次数

DynamicResource颜色不适用于边框上的BorderBrush - Bug?

Visual Studio 2010 | .NET/WPF 4.0

我认为这可能是一个WPF错误,但我似乎无法找到有关它的错误报告.为了掩盖我只是遗漏一些明显的东西的可能性,我转向stackoverflow寻求答案!

考虑一下这个xaml(代码隐藏中没有任何东西):

<Window x:Class="DownExpanders.BorderTest"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BorderTest" Height="300" Width="300">
    <Window.Resources>
        <Color x:Key="BackgroundColor" R="255" G="0" B="0" A="255"/>
        <Color x:Key="BorderColor" R="0" G="0" B="255" A="255"/>
        <SolidColorBrush x:Key="BorderColorBrush" Color="{DynamicResource BorderColor}"/>
    </Window.Resources>
    <Grid>
        <Border BorderThickness="20">
            <Border.Background>
                <SolidColorBrush Color="{DynamicResource BackgroundColor}"/>
            </Border.Background>
            <Border.BorderBrush>
                <SolidColorBrush Color="{DynamicResource BorderColor}"/>
            </Border.BorderBrush>
        </Border>

        <Border Margin="40" BorderBrush="{DynamicResource BorderColorBrush}" BorderThickness="20"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

在设计师中,它按预期呈现.外边框有一个大的蓝色边框和一个红色背景,内边框有一个大的蓝色边框.大.

当我运行代码时,外边框没有边框 - 看起来它只是没有加载.背景设置为红色正确.同时,内边框确实正确加载其蓝色边框.

如果我将所有"DynamicResource"更改为"StaticResource",它会在运行时正确呈现.这种不一致真的让我烦恼,我无法弄明白.

所以:

  1. 为什么DynamicResource不能用于BorderBrush?
  2. 鉴于#1,为什么没有它的后台工作?
  3. 为什么在资源中明确定义纯色画笔似乎可以解决问题呢?

编辑:

看起来它是MS决定不修复(感谢一个bug 谢里登的链接):http://connect.microsoft.com/VisualStudio/feedback/details/589898/wpf-border-borderbrush-does-not-see-变化,在动态资源

wpf border dynamicresource c#-4.0

9
推荐指数
1
解决办法
4923
查看次数

标签 统计

wpf ×2

border ×1

c#-4.0 ×1

dynamicresource ×1

grid ×1

stackpanel ×1

width ×1