超过容器时隐藏面包屑项

时间:2013-07-22 08:51:36

标签: wpf xaml modern-ui

我使用ListBox控件在我的XAML中创建了一个面包屑。它工作得很好。但是,当我尝试显示添加太多项目时,自然它只显示其中的一些。我想以某种方式隐藏左手物品,直到右侧元素可见。理想情况下,它也应该留下一些自由空间(右侧)。我怎么能这样做?

                <ListBox Height="80" HorizontalAlignment="Stretch" x:Name="breadcrumb"
            MinWidth="300" Background="Transparent" BorderThickness="0"
            ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Margin="8,0,0,0" Orientation="Horizontal" HorizontalAlignment="Stretch" Background="Transparent">
                            </StackPanel>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="Background" Value="#111"/>
                            <Setter Property="BorderBrush" Value="#AAA"/>
                            <Setter Property="HorizontalContentAlignment" Value="Center"/>
                            <Setter Property="VerticalContentAlignment" Value="Center"/>
                            <Setter Property="Padding" Value="0"/>
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="ListBoxItem">
                                        <StackPanel Orientation="Horizontal" Margin="-8,0,0,0">
                                            <Image Source="Assets/breadcrumb.png" VerticalAlignment="Center" Margin="5,0,0,0"/>
                                            <ContentPresenter />
                                        </StackPanel>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </ListBox.ItemContainerStyle>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel VerticalAlignment="Stretch">
                                <TextBlock FontSize="35" Text="{Binding Name}" VerticalAlignment="Center" Padding="5,10"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

1 个答案:

答案 0 :(得分:1)

您可能需要为Panel构建自定义ListBox.ItemsPanelTemplate。您可以通过这种方式非常简单地创建所需的功能,因为您基本上可以在渲染时测量每个面包屑并仅显示适合的面包屑。

如果您还没有这方面的经验,请不要被推迟......您可以使用自定义Panel来完成一些精彩的事情。以下是一些可以帮助您的文章:

Panels Overview (MSDN)

How to create a Custom Layout Panel in WPF

Creating Custom Panels In WPF