C# 按字母顺序对StackPanel中的元素排序?
我的网格中有一个StackPanel,它显示了一个动态生成的按钮列表,我试图找出如何让它们按字母顺序升序显示 XAML代码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 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()
{
}
}