Skip to main content
 首页 » 编程设计

c#之动态创建 WrapPanel 按钮

2024年02月24日34落叶

我有一张表存储购买的元素和在 NHibernate 中使用的实体类:

public class PurchasedItem 
{ 
    public virtual int Id          { get; set; } 
    public virtual Product Product { get; set; } 
    public virtual int SortSale    { get; set; } 
} 

我想通过从 PurchasedItems 中获取所有记录来减少代码重复表(IList <PurchasedItem> 对象)。记录已按 SortSale 降序排序柱子。创建 WrapPanel 的最佳方式是什么?基于 IList <PurchasedItem> 的按钮目的?我也想为每个按钮分配事件处理程序。该按钮显示带有产品名称的标题。

请您参考如下方法:

您需要使用 WrapPanel 作为 ItemsPanel 创建一个列表框。在 XAML 中,您可以执行以下操作:

<ListBox Name="MyList" ItemsSource={StaticResource YourList}> 
    <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
            <WrapPanel/> 
        </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
        <DataTemplate> 
            <Button Height="40" MinWidth="40" Content="{Binding Id}" Click="Button_Click"/> 
        </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

在此示例中,我假设 YourList 是 PurchasedItem 的列表。您还可以从代码中设置 ItemsSource(即:MyList.ItemsSource = YourList;)。当您单击该按钮时,它会调用以下内容,它可以显示一个包含您需要的任何内容的消息框:

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
        MessageBox.Show(((sender as Button).DataContext as PurchasedItem).Product.Name); 
    } 

请注意,我将按钮的内容设置为 PurchasedItem 的 ID,因此您可能想要更改它。