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
применять.