我有一个包含一些数据的网格,其中一个单元格包含相当长的字符串(可能有相当多的字符串)。因此,为了不使用太多的可用窗口空间,我希望这些字符串是可滚动的。垂直工作,但无论我尝试,我不能得到一个水平滚动条。
这是我的xaml:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="150" Width="250">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" Grid.Column="0">
<ItemsControl ItemsSource="{Binding Path=BoundTexts}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Text}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Grid>
</Window>
下面是要测试的代码。
using System.Collections.Generic;
using System.Windows;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<BoundClass> temp = new List<BoundClass>();
for (int i = 0; i < 10; i++)
{
string t = ""; // just to create some long strings.
for (int j = 0; j < 10; j++) // I know it can be done better.
{
t += $"{j*10:D2}********";
}
temp.Add(new BoundClass(t));
}
BoundTexts = temp.ToArray();
DataContext = this;
}
public BoundClass[] BoundTexts { get; set; }
}
public class BoundClass
{
public string Text { get; set;}
public BoundClass(string text)
{
Text = text;
}
}
}
我知道这里有一些类似的问题,但据我所见,它们都被模板和其他复杂的主题所笼罩。还有一些是由“确保你有一个约束容器围绕它”来回答的,我想我是由网格来回答的。
2条答案
按热度按时间rlcwz9us1#
将
ScrollViewer.HorizontalScrollBarVisibility
和ScrollViewer.VerticalScrollBarVisibility
设置为"Auto"
就可以了。VerticalScrollBarVisibility
的默认值为ScrollBarVisibility.Visible
但HorizontalScrollBarVisibility
的默认值为ScrollBarVisibility.Disabled
**。因此,仅设置HorizontalScrollBarVisibility = "Auto"
应该足够均匀djmepvbi2#
将
ScrollViewer
添加到ItemsControl
的正确方法是将其放入ControlTemplate
以 PackageItemsPresenter
。这样ScrollViewer
就可以正常工作。如果你不这样做(而是 Package
ItemsControl
),ScrollViewer
将试图滚动ItemsControl
,而不是项目!但是你想让
ScrollViewer
检测ItemsControl
的溢出,自然,ItemsControl
本身会拉伸以占据可用空间-它不会溢出,并且会正确显示(完全可见),但是项目确实溢出了ItemsControl
的空间,这就是为什么 PackageItemsControl
不会像预期的那样工作。此外,您必须显式启用
ScrollViewer.HorizontalScrollBarVisibility
。请务必了解,将其设置为Auto
将影响性能。建议将其设置为Hidden
或Visible
。