C# 在ItemsControl中按从右上到左下的顺序排列项目

C# 在ItemsControl中按从右上到左下的顺序排列项目,c#,wpf,xaml,C#,Wpf,Xaml,我试图在WPF应用程序的一个视图中的ItemsControl中设置一个列表 问题是我需要控件中显示的项目的其他顺序。 通常,items控件从左到右和从上到下显示项目: 1 2 3 4 5 6 7 8 9 10 11 12 但是,我希望以另一种方式显示我的项目-从右上到左下-如下所示: 11 9 7 5 3 1 12 10 8 6 4 2 我当前的ItemsControl是: Grid.Column="1" Bord

我试图在WPF应用程序的一个视图中的ItemsControl中设置一个列表

问题是我需要控件中显示的项目的其他顺序。 通常,items控件从左到右和从上到下显示项目:

1  2  3  4   5   6
7  8  9  10  11  12
但是,我希望以另一种方式显示我的项目-从右上到左下-如下所示:

11  9   7  5  3  1
12  10  8  6  4  2
我当前的ItemsControl是:

        Grid.Column="1"
        BorderThickness="1"
        BorderBrush="{DynamicResource WindowTitleColorBrush}">
    <ItemsControl ItemsSource="{Binding Truck.Containers}">
         <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                  <UniformGrid Rows="2" />
              </ItemsPanelTemplate>
          </ItemsControl.ItemsPanel>
    </ItemsControl>
</Border>
Grid.Column=“1”
BorderThickness=“1”
BorderBrush=“{DynamicSource WindowTitleColorBrush}”>
我不能仅仅通过在viewmodel中降序来重新排列我的列表,因为它将以12开始,以1结束,而不是11-2。
有没有其他方法可以按我想要的顺序显示我的列表?

我认为您可以遵循以下三种解决方案之一:

  • 在视图模型中按需订购项目

  • 使用
    CollectionViewSource
    -在那里进行自定义订购

  • 创建一个自定义的
    面板
    ,该面板可根据需要对项目进行排序,并将其用作
    项目span模板
    。要创建自定义面板,请创建自定义类并从
    panel
    UniformGrid
    继承。而不是覆盖两种方法:

  • 测量溢出-确定所需的面板尺寸 根据子元素的所需大小和可用的 空间

    ArrangeOverride-在最终样式中排列元素 可用空间。最终尺寸可以小于要求的尺寸

    有关此和此中自定义面板的详细信息


    您还可以查看。

    我认为您可以遵循以下三种解决方案之一:

  • 在视图模型中按需订购项目

  • 使用
    CollectionViewSource
    -在那里进行自定义订购

  • 创建一个自定义的
    面板
    ,该面板可根据需要对项目进行排序,并将其用作
    项目span模板
    。要创建自定义面板,请创建自定义类并从
    panel
    UniformGrid
    继承。而不是覆盖两种方法:

  • 测量溢出-确定所需的面板尺寸 根据子元素的所需大小和可用的 空间

    ArrangeOverride-在最终样式中排列元素 可用空间。最终尺寸可以小于要求的尺寸

    有关此和此中自定义面板的详细信息


    您还可以查看。

    只是一个在代码中执行此操作的建议:将列表拆分为偶数或奇数,按降序排列这两个列表,然后将前两个列表中的元素添加到绑定到ItemsControl的第三个列表中

    建议在代码中这样做:将列表拆分为偶数或奇数,通过降序将这两个列表排序,然后将前两个列表中的元素添加到绑定到ItemsControl的第三个列表中

    最好的方法是在ViewModel中按您想要的方式订购项目。解决方案的一半位于UniformGrid上的
    FlowDirection=“RightToLeft”
    。另一半您可以通过创建所述的派生类来解决,最好的方法是按照您希望在ViewModel中的方式对项目进行排序。另一半解决方案位于UniformGrid上的
    FlowDirection=“RightToLeft”
    。另一半可以通过如下所述生成派生类来解决