2014-04-01 32 views
0
<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> 

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

+0

发布完整的XAML和DataContext代码。 –

+0

你去我复制了整个XAML在这里 – GutterStink

回答

1

你的问题是正确的,在XAML中:

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

既然你想要的矩形占据两列,当条件满足时,刚刚从Rectangle标签去除Grid.ColumnSpan,放入样式&你是好去。像这样:

<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> 
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> 

所以我觉得很遗憾,因为您提供您是唯一一个可以在信息,真的找到你的错误...如果我是你,我会好好看看那Binding Path

+0

谢谢谢里安,感谢它,该属性是一个错字,我只是玩Grid.ColumnSpan属性,我不能让你的示例代码工作。事实上,我可以得到它的工作,如果我只是将Grid.Columnspan设置为2风格 – GutterStink

+0

谢谢,我能够解决上述评论的问题,将关闭此问题。 – GutterStink

0

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