DataTemplateSelector получить родительский ActualWidth

Я пытаюсь установить различные DataTemplates для ListBox в зависимости от страниц ActualWidth. По сути, я хотел бы отобразить больше данных, чтобы заполнить пустое пространство.

Поскольку элемент, который он сам определяет, также является параметром того, какой DataTemplate использовать, я полагаю, что наилучшим способом является использование DataTemplateSelector.

Что было бы лучшим способом для достижения этой цели, так как я не нашел способа добавить DependencyProperty к DataTemplateSelector.

1 ответ

При использовании DataTemplateSelector, вы получите доступ к элементу данных, который будет иметь DataTemplate применяется к нему. От DataTemplateSelector страница на MSDN:

public class TaskListDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate
        SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;

        if (element != null && item != null && item is Task)
        {
            Task taskitem = item as Task;

            if (taskitem.Priority == 1)
                return
                    element.FindResource("importantTaskTemplate") as DataTemplate;
            else 
                return
                    element.FindResource("myTaskTemplate") as DataTemplate;
        }

        return null;
    }
}

Обратите внимание, как object item входной параметр приведен к фактическому типу элемента в приведенном выше примере. Таким образом, вы можете добавить свойство в свой класс элементов данных для хранения информации о размере, с помощью которой вы можете определить, какой DataTemplate применять.

Другие вопросы по тегам