根据网格的宽度显示某些内容

时间:2011-02-23 14:16:14

标签: c# wpf

enter image description here

假设我有一个2 x 2网格。它们包含不同重要性的内容。

单元格(0,0)和(0,1)具有重要信息。 单元格(1,0)和(1,1)的重要信息不太重要。

当我调整窗口大小时,网格的尺寸也会发生变化。当网格超出阈值宽度时,如何不显示非重要单元格。

我考虑过将某种可见性与最小宽度绑定在一起的某种值转换器,但是这样做是不是很简单?

1 个答案:

答案 0 :(得分:1)

可能有更优雅的方式来做到这一点,但以下工作。

当窗口宽度低于阈值时,它使用触发器将右列ColumnDefinition的MaxWidth属性设置为0。

XAML:

<Window x:Class="Misc.Window1"
        x:Name="Window1Name"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" SizeChanged="Window1_SizeChanged">
    <Grid TextBlock.FontSize="40">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition x:Name="RightColumn">
                <ColumnDefinition.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=Window1Name, Path=HideRightColumn}" Value="True">
                                <Setter Property="ColumnDefinition.MaxWidth" Value="0"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ColumnDefinition.Style>
            </ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">0,0</TextBlock>
        <TextBlock Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">0,1</TextBlock>
        <TextBlock Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">1,0</TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">1,1</TextBlock>
    </Grid>
</Window>

代码背后:

public partial class Window1 : Window, INotifyPropertyChanged
{
    public Window1()
    {
        InitializeComponent();
    }

    public bool HideRightColumn
    {
        get
        {
            return this.Width < 200;
        }
    }

    private void Window1_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("HideRightColumn"));
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}