更新Grid.ColumnSpan不会更改矩形的列跨度

时间:2014-04-01 20:59:09

标签: c# wpf grid-layout xamdatagrid

<Window x:Class="ColumnSpan_Check.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">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Rectangle Fill="Red" Grid.Column="0" Grid.ColumnSpan="1">
            <Rectangle.Style>
                <Style>
                    <Setter Property="Grid.ColumnSpan" Value="2"/>
                </Style>
            </Rectangle.Style>
        </Rectangle>
    </Grid>
</Window>

为什么我不能让矩形在这里占据两列?我希望矩形在满足某个条件时占用两列(使用数据触发器),问题是数据触发器被触发但矩形的布局不会更新以占据两列。

3 个答案:

答案 0 :(得分:1)

这可能只是输入错误,但此属性不起作用:

public Visibility GridColVisibility
{
    get { return GridColVisibility; }
    set { GridColVisibility= value; RaisePropertyChanged(() => GridColVisibility); }
}

你不能在属性中使用属性名称​​ 属性......你会收到错误。您需要private成员来支持您的财产......类似这样的内容:

private Visibility gridColVisibility;
public Visibility GridColVisibility
{
    get { return gridColVisibility; }
    set { gridColVisibility = value; RaisePropertyChanged(() => GridColVisibility); }
}

但是......我会假设这只是一个输入错误。

看着你的DataTrigger,我真的看不到任何明显错误的东西,所以我只能假设你的Binding Path不正确......如果是,那么看看输出Visual Studio中的窗口,您应该找到错误的详细信息。这个小例子表明 肯定可以在Grid.ColumnSpan中设置DataTrigger属性:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Rectangle Fill="LightGreen">
        <Rectangle.Style>
            <Style>
                <Style.Triggers>
                    <Trigger Property="UIElement.IsMouseOver" Value="True">
                        <Setter Property="Grid.ColumnSpan" Value="2" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
</Grid>

所以我认为不幸的是,鉴于您提供的信息,是唯一能够真正找到您错误的人......我会好好看看{{1如果我是你。

答案 1 :(得分:1)

您的问题就在XAML中:                                                                                                   

您可以在两个地方设置Grid.ColumnSpan附加属性,直接在Rectangle标记中再次设置样式。第一个设置优先于第二个设置。

由于您希望Rectangle在满足条件时占据两列,只需从Grid.ColumnSpan标记中删除Rectangle并将其放入Style&amp;你很高兴去。像这样:

<Rectangle Fill="Red" Grid.Column="0">
    <Rectangle.Style>
        <Setter Property="Grid.ColumnSpan" Value="1"/>
        <Style>
            <Setter Property="Grid.ColumnSpan" Value="2"/>
        </Style>
    </Rectangle.Style>
 /Rectangle>

答案 2 :(得分:0)

我能够通过从按钮中删除Grid.ColumnSpan属性来解决此问题。 谢谢大家的帮助。