如何将滚动按钮添加到数据绑定,水平列表

时间:2010-10-26 02:22:41

标签: silverlight listbox horizontal-scrolling

所以我有一个List,其中包含项目。现在他们是图片的缩略图。我希望这个列表绑定到后面的代码中的更改列表,所以我使用了Listbox。但是,我需要这个盒子水平流动。因此它被设计为StackPanel。最后,我希望按钮控制滚动,而不是滚动条。这是不起作用的部分这是一个代码示例:

<UserControl x:Class="TestBench.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.Resources>

    <Style x:Key="StackHorz" TargetType="ListBox">
        <Style.Setters>
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Background="AliceBlue" />
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <ScrollViewer BorderBrush="DarkGreen" BorderThickness="2" VerticalScrollBarVisibility="Disabled"  HorizontalScrollBarVisibility="Disabled">
                            <ItemsPresenter />
                        </ScrollViewer>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>

</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White">
    <Button x:Name="_Next" Content="NEXT" Height="20" Width="40" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
    <Button x:Name="_Prev" Content="PREV" Height="20" Width="40" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
    <ListBox x:Name="TestList" Height="100" Width="800" VerticalAlignment="Top">
        ...Insert ListItems...
    </ListBox>
</Grid>

在此示例中,列表框未绑定,但我需要能够设置ItemsSource = {Binding Content}。我试过的代码是:

namespace TestBench

{     public partial class MainPage:UserControl     {         公共MainPage()         {             的InitializeComponent();

        TestList.Style = this.Resources["StackHorzTop"] as Style;
        _Next.Click += new RoutedEventHandler(_Next_Click);
        _Prev.Click += new RoutedEventHandler(_Prev_Click);
    }

    void _Prev_Click(object sender, RoutedEventArgs e)
    {
        TestList.ScrollIntoView(TestList.Items[0]);
    }

    void _Next_Click(object sender, RoutedEventArgs e)
    {
        TestList.ScrollIntoView(TestList.Items[TestList.Items.Count - 1]);
    }
}

}

但ScrollIntoView什么都不做。我也尝试将ScrollViewer作为列表框的VisualTreeHelper.GetChild(),但使用ScrollToHorizo​​ntalOffset()滚动它也没有任何作用。

我知道这是一种奇怪的设置方式,但我需要所有3种功能(绑定,水平方向,无按钮滚动滚动条)。有人知道我在这个问题上哪里出错吗?

提前致谢,

图表。

1 个答案:

答案 0 :(得分:0)

也许您可以尝试将列表框放在ScrollViewer中并设置ScrollViewer的样式,以便滚动条不可见(仅按钮)。

可以找到有关ScrollViewer可模板部件的更多信息here