我需要垂直列出项目(全部大小相同)(使用ScrollViewer).如果容器足够大以显示x列,我希望项目通过x列传播
我第一次尝试:
<ScrollViewer>
<toolkit:WrapPanel Orientation="Horizontal" ItemHeight="30" ItemWidth="100">
<Button Content="1" />
<Button Content="2" />
<Button Content="3" />
<Button Content="4" />
<Button Content="5" />
</toolkit:WrapPanel>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

结果 - WrapPanel的工作方式与我想的一样,但我的项目是从"从左到右"排序的(不是垂直的
然后我尝试将WrapPanel的Orientation设置为" Vertical ":

结果 - 我的项目是垂直排序但未在多列上展开.
以下是我想要呈现的项目:

我真的想避免编写监视控件大小的代码来创建/删除列,具体取决于它的大小.
我已经了解到,如果将网格行的高度ScrollViewer设置为Auto,则垂直滚动条将不会生效,因为它的实际大小ScrollViewer可能大于视线中的高度.因此,为了使滚动条工作,我应该将高度设置为固定数字或星形高度
但是,我现在有了这个要求,我有两个不同的视图驻留在两个网格行中,并且我有一个切换按钮可以在这两个视图之间切换:当显示一个视图时,另一个视图隐藏/消失.所以我定义了两行,两个高度都设置为Auto.我绑定的每一行中的布尔属性视图的可视性从我的视图模型(一个是从转换True到Visible从和其他True来Collapsed.我们的想法是,当一个视图的能见度Collapsed,网格行的高度/视图将被改变自动为0.
视图显示/隐藏工作正常.但是,在一个视图中我有一个ScrollViewer,正如我所提到的,当行高设置为时,它不起作用Auto.任何人都能告诉我如何在仍然ScrollViewer自动工作的同时满足这样的要求吗?我想我可以在代码隐藏中设置高度.但由于我使用的是MVVM,因此需要额外的通信/通知.有没有更简单的方法呢?
我想知道是否可以轻松关闭TreeView的ScrollViewer.
我有一个带网格的UserControl.其中一个Cell在Stackpanel中有一些TreeView.Control的高度根据TreeView的高度自动调整,因此不需要滚动条.
问题是:我在ListBox中有一堆具有自己的ScrollViewer,但是当我使用MouseWheel时,当你在TreeView上时滚动停止.
这是因为TreeView有自己的ScrollViewer来窃取MouseWheel.我知道这可能是通过覆盖控件模板来实现的,但我希望有一种更简单的方法.
我有一个包含文本块项目堆栈面板的scrollviewer(实际上,这些可能是tabitems,我在scrollviewer中使用stackpanel来覆盖tabcontrol模板中的默认tabpanel).我希望能够做的是,当更改选定的选项卡时,将新选择的选项卡移动到滚动查看器可见区域的中心.理想情况下,这适用于所有选项卡,甚至是远端的选项卡,但我愿意能够告诉滚动查看器滚动使得特定元素尽可能接近居中.
在WPF中有没有明显的方法来实现这一目标?我现在能想到的所有解决方案都涉及很多关于自定义控件的工作.

是否可以创建基于ScrollViewer滚动条可见性触发的触发器?我有一个ScrollViewer与它VerticalScrollBarVisibility设置为Auto,我想改变一些的ScrollViewer的属性只有当在滚动条实际上是可见的.
像这样的东西:
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ScrollViewer.Triggers>
<Trigger Property="IsScrollBarVisible" Value="True">
<!-- Setters -->
</Trigger>
</ScrollViewer.Triggers>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud) 是否可以更改WPF ScrollViewer滚动的数量?我只是想知道是否可以更改滚动查看器,以便在使用鼠标滚轮或滚动查看器箭头时,可以更改增量滚动的数量.
我想的属性改变ScrollViewer的ListBox从C#.
我在Stackoverflow上找到了这个问题.我接受了接受的答案的建议,并将其ScrollViewer作为子类的属性公开.但是,这似乎不适用于下面显示的示例.该问题中的一些评论也表明这种技术不起作用.
XAML:
<Window x:Class="StackoverflowListBoxScrollViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
</Window>
Run Code Online (Sandbox Code Playgroud)
C#:
using System;
using System.Windows;
using System.Windows.Controls;
namespace StackoverflowListBoxScrollViewer
{
public class MyListBox : ListBox
{
public ScrollViewer ScrollViewer
{ get { return (ScrollViewer)GetTemplateChild("ScrollViewer"); } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var myListBox = new MyListBox();
Content = myListBox;
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new …Run Code Online (Sandbox Code Playgroud) 我有一个Visuals 的集合ListBox.我需要找到XPosition里面的一个元素,然后动画HorizontalOffset中的ListBox的ScrollViewer.基本上我想创建一个动画ScrollIntoView方法.
这给了我一些问题.首先,我如何获得对ListBoxs scrollviewer 的引用?其次,我怎样才能获得相对XPosition或HozintalOfffset任意元素ListBox?
我并没有对ListBox自身的任何输入做出反应,因此我无法使用Mouse相关属性.
我无法确定如何使用鼠标滚轮水平滚动.垂直滚动可以自动运行,但我需要水平滚动我的内容.我的代码看起来像这样:
<ListBox x:Name="receiptList"
Margin="5,0"
Grid.Row="1"
ItemTemplate="{StaticResource receiptListItemDataTemplate}"
ItemsSource="{Binding OpenReceipts}"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
ScrollViewer.HorizontalScrollBarVisibility="Visible"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我的项目模板如下所示:
<DataTemplate x:Key="receiptListItemDataTemplate">
<RadioButton GroupName="Numbers"
Command="{Binding Path=DataContext.SelectReceiptCommand,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type POS:PointOfSaleControl}}}"
CommandParameter="{Binding }"
Margin="2,0"
IsChecked="{Binding IsSelected}">
<RadioButton.Template>
<ControlTemplate TargetType="{x:Type RadioButton}" >
<Grid x:Name="receiptGrid" >
<Grid>
<Border BorderThickness="2"
BorderBrush="Green"
Height="20"
Width="20">
<Grid x:Name="radioButtonGrid"
Background="DarkOrange">
<TextBlock x:Name="receiptLabel"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding Path=NumberInQueue, Mode=OneWay}"
FontWeight="Bold"
FontSize="12"
Foreground="White">
</TextBlock>
</Grid>
</Border>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Margin"
TargetName="receiptGrid"
Value="2,2,-1,-1"/>
<Setter Property="Background"
TargetName="radioButtonGrid"
Value="Maroon"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</RadioButton.Template> …Run Code Online (Sandbox Code Playgroud) 我有一个ScrollViewer的问题,我用它来滚动包含数据网格的用户控件.如果没有滚动查看器,列会根据需要填充数据网格,但在添加滚动查看器时,列会缩小到~15px.我能够简化我的布局,仍然可以重现这种行为.
将数据网格宽度绑定到另一个控件时,列具有它们的法线,但这与数据网格上的固定宽度具有相同的效果.我想我不是第一个遇到这个问题的人.如何解决此问题,让我的网格将其大小调整为可用空间并为其列提供一个比例宽度?
使用scrollviewer:
没有:

<Window x:Class="GridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<Grid MinWidth="200">
<DataGrid Margin="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Column A" Width="*"/>
<DataGridCheckBoxColumn Header="Column B" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
scrollviewer ×10
wpf ×10
xaml ×5
c# ×3
listbox ×2
animation ×1
autosize ×1
silverlight ×1
treeview ×1
triggers ×1
uwp-xaml ×1
wpfdatagrid ×1
wrappanel ×1