Отображать определенное содержимое в зависимости от ширины сетки - PullRequest
2 голосов
/ 23 февраля 2011

enter image description here

Допустим, у меня есть сетка 2 x 2.Они содержат содержимое разной важности.

Ячейки (0,0) и (0,1) имеют важную информацию.Ячейки (1,0) и (1,1) содержат менее важную информацию.

Когда я изменяю размер своего окна, размеры сеток также меняются.Как не показывать не важные ячейки, когда сетки находятся за пределами пороговой ширины.

Я рассмотрел какой-то конвертер значений, который связывает видимость с минимальной шириной, но есть менее хакерский способсделать это?

1 Ответ

1 голос
/ 23 февраля 2011

Может быть более элегантный способ сделать это, но работает следующее:

Он использует триггер, чтобы установить для свойства MaxWidth столбца ColumnDefinition правого столбца значение 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...