WPF如何滚动UniformGrid?

6
我需要显示特定路径中的所有文件。我创建了一个用户控件,其中包含用于文件详细信息(名称、大小、扩展名等)的文本块,该控件将成为统一网格的子级。
问题是,如果我的统一网格是5x5,并且我有超过25个文件,则第26个元素不会被显示。
我想知道,是否有一种方法可以滚动统一网格的内容?
我知道我可以使用列表框和绑定(我仍在阅读它),但我需要以编程方式添加控件,因为该控件具有事件,并且当创建新的用户控件实例并将其添加到子数组时,我正在订阅它。
我已经看过 this 帖子,并且已经将 uniforgrid 放置在 ItemsControl 中,但它根本不起作用,这是我的 XAML:
<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" >
    <ItemsControl x:Name="gridArchivos">
        <ItemsControl.ItemsPanel >
            <ItemsPanelTemplate >
                <UniformGrid Columns="5" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>                    
</ScrollViewer>

根据帖子,只需要指定列或行,而不是两者都需要。所以,只需5列。我不想要水平滚动,只要垂直的。感谢您的时间。
1个回答

8

我复制了你的Xaml,看起来按照预期工作。

这是我的测试代码,希望能帮助您诊断问题。

Xaml:

<Window x:Class="WpfApplication7.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" Name="UI">
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" >
        <ItemsControl ItemsSource="{Binding Items, ElementName=UI}">
            <ItemsControl.ItemsPanel >
                <ItemsPanelTemplate >
                    <UniformGrid Columns="5"  />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </ScrollViewer>
</Window>

代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        for (int i = 0; i < 1000; i++)
        {
            Items.Add("Stackoverflow"+i);
        }
    }

    private ObservableCollection<string> items = new ObservableCollection<string>();
    public ObservableCollection<string> Items
    {
        get { return items; }
        set { items = value; }
    }
}

结果:

enter image description here


通过您的示例,我发现我需要添加很多项才能看到我想要的网格。有没有一种方法可以像5x5矩阵一样保持项目排列?当有5个项目时,网格会在垂直方向上居中显示它们,而我希望它们在顶部。感谢您的帮助! - BlackCath
1
没事了,我找到了,我在UniformGrid属性中添加了VerticalAlignment="Top"。谢谢你的帮助! - BlackCath
如果我也想定义行呢?如果我定义列的数量和VerticalAlignment="Top",那么它就像上面的例子一样工作,但是如果我也定义行,它就不起作用了。 - Krusty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接