WPF滚动Uniformgrid

时间:2013-07-11 00:43:52

标签: wpf xaml itemscontrol scrollviewer uniformgrid

我需要显示位于特定路径中的所有文件。我创建了一个用户控件,其中包含文件详细信息的文本块(名称,大小,扩展名等),此控件将是统一网格的子控件。

问题是,如果我的uniformgrid为5x5,并且我有超过25个文件,则不会显示第26个元素。

我想知道,有没有办法滚动统一网格的内容?

我知道我可以使用列表框和绑定(我还在阅读它),但我需要以编程方式添加控件,因为控件有一个事件,我在新实例时订阅它创建usercontrol,然后将其添加到子数组中。

我看过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>

根据帖子,只需要指定cols或rows,而不是两者。所以,只有5个小马。 我不希望hrizontal滚动,只需垂直。

感谢您的时间。

1 个答案:

答案 0 :(得分:7)

我复制了您的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