在WPF中为不同大小的项目使用不同的面板

时间:2014-07-23 07:43:27

标签: wpf panel datatemplateselector

我想为容器的项目计数使用不同的面板。我有办法实现这个目标吗?

例如,我想将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>

由于

0 个答案:

没有答案