0

我想为容器的项目计数使用不同的面板。有没有办法可以做到这一点?

例如,我想使用PanelA少于 5 个项目,PanelB更多。

DataTemplateSelector为此目的实现了这个类,它似乎有效。但是当涉及到绘制 UI 元素时,我没有得到任何结果,而是空白的屏幕。

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>

谢谢

4

0 回答 0