C# 按字母顺序对StackPanel中的元素排序?

C# 按字母顺序对StackPanel中的元素排序?,c#,wpf,xaml,C#,Wpf,Xaml,我的网格中有一个StackPanel,它显示了一个动态生成的按钮列表,我试图找出如何让它们按字母顺序升序显示 XAML代码 <StackPanel Grid.Column="0" Name="AreaStackPanel" Orientation="Vertical" Background="Khaki"> </StackPanel> <StackPanel Grid.Column="1" Orientation="Horizontal" Background

我的网格中有一个StackPanel,它显示了一个动态生成的按钮列表,我试图找出如何让它们按字母顺序升序显示

XAML代码

<StackPanel Grid.Column="0" Name="AreaStackPanel" Orientation="Vertical" Background="Khaki">
</StackPanel>

<StackPanel  Grid.Column="1"  Orientation="Horizontal" Background="Beige">
    <GroupBox Name="StatusGroupBox" Header="Work Items" Width="234">
        <StackPanel Name="StatusStackPanel"></StackPanel>
    </GroupBox>
</StackPanel>

C#代码

private void LoadExistingAreas()
{
List collections=Reporter.GetCollections();
字符串unique=“”;
foreach(集合中的字符串集合)
{
字符串areaName=Path.GetFileName(集合);
如果(unique.Contains(areaName))继续;
唯一+=区域名称;
按钮区域按钮=新按钮();
区域按钮。单击+=区域按钮\u单击;
区域按钮。边距=新厚度(2);
areaButton.Content=areaName;
AreaStackPanel.Children.Add(区域按钮);
地区
}
}

我建议使用MVVM来完成此任务。我正在发布一个例子,说明什么东西可以以一种相当干净的方式工作

您的XAML应该如下所示:

<Window x:Class="ItemTemplateDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ItemTemplateDemo"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
    <local:MainViewModel/>
</Window.DataContext>
<Grid>
    <ItemsControl ItemsSource="{Binding ButtonDescriptions}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel></StackPanel>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Margin="2" Content="{Binding Name}" Command="{Binding OnClickCommand}"></Button>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

如果您不熟悉MVVM,我还建议您阅读以下内容

您只需按字母顺序对列表进行排序。然后您的控件也将被排序。
<Window x:Class="ItemTemplateDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ItemTemplateDemo"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
    <local:MainViewModel/>
</Window.DataContext>
<Grid>
    <ItemsControl ItemsSource="{Binding ButtonDescriptions}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel></StackPanel>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Margin="2" Content="{Binding Name}" Command="{Binding OnClickCommand}"></Button>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>
 public class MainViewModel
{
    public ObservableCollection<ButtonDescription> ButtonDescriptions { get; private set; }

    public MainViewModel()
    {
        ButtonDescriptions = new ObservableCollection<ButtonDescription>();

        for (int i = 0; i < 10; i++)
        {
            var bd = new ButtonDescription() { Name = "Button " + i };

            ButtonDescriptions.Add(bd);
        }
    }
}
    public class ButtonDescription
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    private ICommand onClickCommand;
    public ICommand OnClickCommand
    {
        get { return onClickCommand; }
        set { onClickCommand = value; }
    }

    public ButtonDescription()
    {

    }
}