WPF: адаптация к изменениям размера путем изменения уровня детализации - PullRequest
4 голосов
/ 02 февраля 2011

Допустим, что представление содержит список клиентов. По умолчанию этому представлению предоставляется много экранного состояния, и его заполняют сведениями о клиенте. Каждый элемент в списке может отображать имя клиента более крупным шрифтом, а адрес во второй строке - более мелким шрифтом. Может быть, какая-то статистика, например общее количество предыдущих заказов и т. Д.

Теперь, если пользователь сужает окно, ему должно быть достаточно места для всех этих деталей. Каков будет правильный способ борьбы с этим? Есть ли какой-нибудь способ привязки, какая табличка данных используется для каждого элемента?

Теперь, если пользователь сделает окно еще меньше - можно ли будет полностью избавиться от списка? Заменить его на ярлык, показывающий количество клиентов или что-то еще?

Есть предложения, как это можно решить? Знаете ли вы какие-нибудь демонстрации, демонстрирующие что-либо подобное?

1 Ответ

3 голосов
/ 02 февраля 2011

Я бы подошел к этому, привязав свойство Visibility ваших элементов управления к ширине (или высоте, в зависимости от вашей компоновки) окна через конвертер.Рассмотрим что-то вроде этого:

public class HideIfSmallConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var c = value as IComparable;
        if (c == null) return Visibilty.Visible;

        return c.CompareTo(parameter) < 0 ? Visibility.Collapsed : Visibility.Visible;
    }
}

Теперь у нас есть компаратор, который позволит нам свернуть элемент, если значение меньше заданного параметра.Мы можем использовать это следующим образом:

<ListBox Visibility="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor,AncestorType=Window},Converter={StaticResource hideIfSmall},ConverterParameter=400}" />

Таким образом, идея состоит в том, что ListBox разрушается, если ширина окна падает ниже 400.

Ничего из этого не проверено, но, надеюсь, это даст вамнекоторые идеи.

...