Wpf中的ItemsPanelTemplate选择器?

时间:2012-05-18 12:26:20

标签: c# wpf

我需要根据控件上的依赖项属性设置列表框的ItemsPanelTemplate属性。我如何使用DataTemplateSelector来做到这一点?

我有类似的东西:

<ListBox.ItemsPanel>
    <ItemsPanelTemplate>
        <!-- Here I need to replace with either a StackPanel or a wrap panel-->
    </ItemsPanelTemplate>
</ListBox.ItemsPanel>

由于

2 个答案:

答案 0 :(得分:16)

没有ItemsPanelSelector(可能因为它不是DataTemplate),但您可以绑定它或使用Trigger

Binding示例

<ListBox ItemsPanel="{Binding RelativeSource={RelativeSource Self},
                              Path=Background,
                              Converter={StaticResource MyItemsPanelConverter}}">
Trigger示例

中的

Style

<ListBox ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}">
    <ListBox.Style>
        <Style TargetType="ListBox">
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <StackPanel/>
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <!-- Your Trigger.. -->
                <Trigger Property="Background" Value="Green">
                    <Setter Property="ItemsPanel">
                        <Setter.Value>
                            <ItemsPanelTemplate>
                                <WrapPanel/>
                            </ItemsPanelTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>

答案 1 :(得分:0)

我认为这里最好的路线是为ListBox使用Style,并根据你引用的DependencyProperty设置更改ItemsPanel的触发器。