流体列表框上的水平滚动条

时间:2011-03-23 21:15:43

标签: silverlight listbox datatemplate scrollbars

我想要的是什么:要显示水平滚动条。我会稍微编辑它,所以我适合应用程序的其余风格方案,但不是太多。

我有什么

以下是目前列表框的代码。一切都运行得很好,除了滚动条没有出现。你可能会说......“你在任何地方都没有滚动查看器”,但我尝试在很多地方插入一个滚动查看器但仍然没有运气。

列表框代码:

<ListBox ItemsSource="{Binding Items}" ItemTemplate="{StaticResource itemsdatatemplate}" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}" ItemsPanel="{StaticResource HorizontalListBoxTemplate}" ItemContainerStyle="{StaticResource TransparentListBox}" VerticalAlignment="Center" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />

'TransparentListBox'(用于关闭所选的背景颜色):

<Style x:Key="TransparentListBox" TargetType="ListBoxItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Grid>
                    <Border x:Name="HoverBorderBackgroundBrush" BorderThickness="1" Margin="0,0,25,0" Background="Transparent"/>
                    <Border x:Name="SelectedBorderBackgroundBrush" BorderThickness="1" Margin="0,0,25,0" Background="Transparent"/>
                        <ContentPresenter></ContentPresenter>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

水平列表框(使列表框水平,而不是标准垂直)

<ItemsPanelTemplate x:Key="HorizontalListBoxTemplate">
    <StackPanel Orientation="Horizontal">
    </StackPanel>
</ItemsPanelTemplate>

Datatemplate (实际显示项目)

<DataTemplate x:Key="itemsdatatemplate">
        <local:ListItemControl HorizontalAlignment="Left" VerticalAlignment="Top" DataContext="{Binding}"/>
</DataTemplate>

我觉得这将是一个简单的补充,但提前谢谢。

更新

看起来滚动条现在显示为:

    <Style x:Key="ScrollingListBox" TargetType="ListBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid>
                        <ScrollViewer HorizontalScrollBarVisibility="Visible">
                            <ItemsPresenter></ItemsPresenter>
                        </ScrollViewer>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

但他们没有相应的功能。他们觉得......破碎了。但是,如果要定义网格的静态宽度(比如300),那么ScrollViewer就可以完美地运行。现在我有一个完全流畅的布局(意思是拉伸填充),滚动查看器是不可接受的?

1 个答案:

答案 0 :(得分:0)

创建自己的模板时,必须在那里定义ScrollViewer并使用ItemPresenter而不是ContentPresenter。

<Style x:Key="TransparentListBox" TargetType="ListBoxItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Grid>
                    <Border x:Name="HoverBorderBackgroundBrush" BorderThickness="1" Margin="0,0,25,0" Background="Transparent"/>
                    <Border x:Name="SelectedBorderBackgroundBrush" BorderThickness="1" Margin="0,0,25,0" Background="Transparent"/>
                        <ScrollViewer x:Name="ScrollViewer" HorizontalScrollBarVisibility="Visible">
                            <ItemsPresenter />
                        </ScrollViewer>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>