【问题标题】:WPF Scroll a UniformgridWPF 滚动统一网格
【发布时间】:2013-07-09 03:05:26
【问题描述】:

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

问题是,如果我的 uniformgrid 是 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 列。 我不想要水平滚动,只想要垂直滚动。

感谢您的宝贵时间。

【问题讨论】:

    标签: wpf xaml itemscontrol scrollviewer uniformgrid


    【解决方案1】:

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

    结果:

    【讨论】:

    • 通过您的示例,我发现我需要添加很多项目才能以我想要的方式查看网格。有没有办法让项目像 5x5 矩阵一样排列?有 5 个项目,网格以垂直为中心显示它们,我希望它们位于顶部。谢谢你的帮助!!
    • 没关系,我找到了,我在 uniformgrid 属性中添加了 VerticalAlignment="Top"。感谢您的帮助!
    • 如果我也想定义行怎么办?定义列数和VerticalAlignment="Top" 它的工作原理与上面的示例一样,但如果我也定义行数则不行
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多