【问题标题】:Dynamically add label/checkBox-Combo and put code behind动态添加 label/checkBox-Combo 并把代码放在后面
【发布时间】:2019-05-03 19:21:06
【问题描述】:

我已经构建了一个动态生成的标签/复选框列表。

标签内容从带有一些应用程序名称的列表中获取他的内容。 Checkbox(es) 共享一个 CheckBox_Click-Event,当我点击其中一个复选框时触发。我现在遇到的问题是,我无法确定单击了哪个复选框。因为我生成控件,所以无法通过控件后面的绑定来命名。我在通过代码创建 gui 方面并不那么有经验。希望大家能帮帮我。

// This part builds my label/combo-List through a FileInfo-List

Fields = new System.Collections.ObjectModel.ObservableCollection<Field>();
foreach (var app in GetPrograms())
{
  Fields.Add(new Field() {Name = app.Name, Length = 100, Required = true});
}
FieldsListBox.ItemsSource = Fields;
// Here i got the Click-Event.. but i can't identify which Checkbox is clicked

private void CheckBox_Click(object sender, RoutedEventArgs e)
{
  CheckBox senderChk =  sender as CheckBox;

  switch (senderChk.Name)
  {
    //case "checkBox1": // do something
    //case "checkBox2": // do something
  }
}
<!-- And finally the xaml-Code, note the Bindings on label and checkbox -->
    <Grid>
        <ListBox x:Name="FieldsListBox">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding Name}" VerticalAlignment="Center"></Label>
                        <CheckBox IsChecked="{Binding Checked}" Click="CheckBox_Click" Margin="5,0,0,0"></CheckBox>
                    </StackPanel>

因为我已经有一个文件名列表,我想我可以绑定复选框上的名称,所以我知道单击了哪个复选框并且可以管理正确的程序名。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您这样做是为了将选中的属性绑定到组合框。

    <CheckBox IsChecked="{Binding Checked}" ... ></CheckBox>
    

    做同样的事情并像这样绑定组合框的属性 Uid(用于标识 WPF 中的控件):

    <CheckBox ... Uid="{Binding Name}" ... ></CheckBox>
    

    并在您的交换机中使用它。

    【讨论】:

    • 谢谢,这对我有帮助。我很好奇,因为当我用“名称”尝试这个时,我得到了错误:“标记扩展不允许用于“Uid”或“名称”......所以我什至没有用“Uid”尝试过
    • 这是一种解决方法,因为 Uid 不是为此而设计的,它由 WPF 在内部使用。如果你想做这样的事情,你应该创建一个带有标签和组合框的自定义控件
    • Tag 属性是此类事物的另一种选择。不过,整个方法可以改进:在Field 的检查状态更改时发生的操作应该由Field 对象本身在其Checked 属性的设置器中处理(实际上,在setter 调用的方法)。它更干净、更简单,它可以让您任意添加新的Fields,而无需去其他地方编辑 switch 语句。
    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多