【问题标题】:Get object/item on button click (dynamically created button) - stack panel单击按钮时获取对象/项目(动态创建的按钮) - 堆栈面板
【发布时间】:2017-06-10 08:16:54
【问题描述】:

我正在循环我的客户,我需要为每个客户创建一个按钮以防万一 我想删除该特定客户。

这是我的代码:

foreach (var item in customersList)
{
    Button btn = new Button();
    btn.Content = "Customer": + " " + item.Value;
    btn.Height = 40;
    btn.Click += btn_Click;

    TextBox cust = new TextBox();
    cust.Height = 40;
    cust.Text = item.Value;

    stackCustomers.Children.Add(cust);
    stackCustomers.Children.Add(btn);
}

如何附加事件单击我的按钮,以便在单击它时获得客户?

void btn_Click(object sender, RoutedEventArgs e)
{     
    //I tried this but it is not working, unfortunatelly...
    Customer cust = (Customer)sender;
}

【问题讨论】:

    标签: c# wpf button stackpanel


    【解决方案1】:

    简单的方法:将客户附加到Button.Tag 属性

    Button btn = new Button();
    btn.Tag = item; // .Value maybe?
    
    // ...
    
    void btn_Click(object sender, RoutedEventArgs e)
    {
        var button = sender as Button;
        Customer cust = (Customer)button.Tag;
    }
    

    更好的做法是:创建每个客户项目的可视化表示,其中包含按钮。使用Button.CommandButton.CommandParameter={Binding PathToCustomer} 而不是Button.Click

    【讨论】:

    • 它正在工作!关于更好的解决方案,你能解释一下吗?非常感谢!
    • @Roxy'Pro 您应该提供更多关于 XAML 和 customersList 的内容,然后我可以尝试解释可能的更改。
    • 好的,我稍后会提供它,现在我想知道如何将文本框 + 按钮放在堆栈面板中,但要使其彼此相邻,如果我设置 Orientation="Horizo​​ntal" 比它看起来难看,我应该为此提出新问题吗?再次感谢老兄
    • @Roxy'Pro 首先,想想你想要的布局(位置、大小……)然后问自己StackPanel 是否是正确的选择(你可以使用Grid、@987654328 @, ...)。如果你知道你想要的布局,你会找到方法来展示它。在提出问题之前,请务必先研究一下您的资料——大多数事情都会有答案。
    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2016-06-30
    相关资源
    最近更新 更多