WPF listbox 水平方向的左右滚动条用两个button代替,请问这个button事件怎么写?最好能给我个demo。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF listbox 水平方向的左右滚动条用两个button代替,请问这个button事件怎么写?最好能给我个demo。相关的知识,希望对你有一定的参考价值。

绝对新手,一定要给demo哟!感激不尽!

        private void Button_Click(object sender, RoutedEventArgs e)
        
            ScrollViewer sv = FV<ScrollViewer>(this.listBox1);
            sv.PageRight();//向右滚动
        

        public static ci FV<ci>(DependencyObject o)
        where ci : DependencyObject
        
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
            
                DependencyObject c = VisualTreeHelper.GetChild(o, i);

                if (c != null && c is ci)
                    return (ci)c;
                else
                
                    ci cc = FV<ci>(c);

                    if (cc != null)
                        return cc;
                
            
            return null;
        

参考技术A 自己写template吧,template里把那两个箭头换了就好了。追问

亲,可能请你抽空帮我写一个模板样式,我真的不会改样式。

水平布局其项目的 WPF ListBox

【中文标题】水平布局其项目的 WPF ListBox【英文标题】:WPF ListBox that lays out its items horizontally 【发布时间】:2010-11-20 12:30:39 【问题描述】:

我正在尝试编写一个 WPF 应用程序来显示选择中的图像。 我想在窗口顶部的横幅中显示所有可用的图像,并在主窗口中显示主要的选定图像以供进一步处理。

如果我想要窗口左侧的列表,垂直显示图像,我可以使用数据绑定非常优雅地做到这一点。

    <ListBox 
        Name="m_listBox"
        IsSynchronizedWithCurrentItem="True"
        ItemsSource="Binding"            
        >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Image Source="Binding" Width="60" Stretch="Uniform" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

有没有一种简单的方法可以使这个水平而不是垂直? 解决方案的主要要求是:

使用数据绑定填充项目 只需用户单击即可更改所选项目。

【问题讨论】:

【参考方案1】:

WrapPanel

 <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBoxItem>listbox item 1</ListBoxItem>
    <ListBoxItem>listbox item 2</ListBoxItem>
    <ListBoxItem>listbox item 3</ListBoxItem>
    <ListBoxItem>listbox item 4</ListBoxItem>
    <ListBoxItem>listbox item 5</ListBoxItem>
</ListBox>

WPF Tutorial

【讨论】:

或 StackPanel with Orientation="Horizo​​ntal" StackPanel 将是 Nir ​​所说的更好的解决方案。 谢谢!是的,水平方向的 stackPanel 是更好的选择。 代表 andrew megs 给你 +1。谁发现您的代码非常有用,但不想给您“虚构的互联网积分”【参考方案2】:

ListBox 控件的默认ItemsPanelVirtualizingStackPanel,因此如果您想要控件的正常默认体验但只是水平布局,您应该指定它(并更改方向) .

例子:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

【讨论】:

【参考方案3】:

这是 StackPanel 的示例。 带有 Mvvm 绑定的水平面包屑

 <ItemsControl
            x:Name="tStack"
            Grid.Row="1"
            Grid.Column="0"
            Height="40"
            Background="Red"
            ItemsSource="Binding BreadCrumbs">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button
                        Margin="5"
                        CommandParameter="Binding ."
                        Command="Binding BreadcrumbClickCommand, RelativeSource=RelativeSource AncestorType=ItemsControl, Path=DataContext.BreadcrumbClickCommand"
                        Content="Binding Name" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

【讨论】:

以上是关于WPF listbox 水平方向的左右滚动条用两个button代替,请问这个button事件怎么写?最好能给我个demo。的主要内容,如果未能解决你的问题,请参考以下文章

WPF ListBox加了很多Items 在平板 滑动ListBox 到最下面 继续滑动 导致整个界面的左右移动 这是啥原因

WPF中ListBox滚动时的缓动效果

WPF 的Listbox 滚动处理

WPF 中的 ListBox、VirtualizingStackPanel 和平滑滚动

WPF ListBox/ListView/DataGrid 列表滚动与虚拟化

wpf listbox 显示不全 而且没滚动条