Использование различных панелей для разных размеров элементов в WPF

Вопрос:

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

Например, я хочу использовать PanelA для менее чем 5 элементов, PanelB для большего.

Для этой цели я DataTemplateSelector класс DataTemplateSelector и, похоже, работает. Но когда дело касается рисования элемента пользовательского интерфейса, я не получаю никаких результатов, кроме пустого белого экрана.

public class PanelDataTemplateSelector : DataTemplateSelector
{

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

MyViewModel VM = (VisualTreeHelper.GetParent(container) as ContentControl).DataContext as MyViewModel;

DataTemplate template = null;

if (VM.ItemsList.Count < 5)
template = element.FindResource("PanelA") as DataTemplate;
else
template = element.FindResource("PanelB") as DataTemplate;

return template;
}
}

Ниже приведен один из шаблонов в моем XAML-коде. Второй – тот же, но PanelB.

<DataTemplate x:Key="PanelA">
<ListBox x:Name="ItemsListBox" ItemsSource="{Binding Path=ItemsList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Path=Image}"/>
<TextBlock Text="{Binding Path=Label}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<mynamespace:PanelA />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</DataTemplate>

<DataTemplate x:Key="PanelB">
...
</DataTemplate>

После ресурсов у меня есть следующий раздел ContentControl.

<Grid>
<ContentControl>
<ContentControl.ContentTemplateSelector>
<local:PanelDataTemplateSelector />
</ContentControl.ContentTemplateSelector>
</ContentControl>
</Grid>

благодаря

Оцените статью
TechArks.Ru
Добавить комментарий