是否有其他方法来创建使用c#的组合框(而不是SelectionChangedEventHandler)

本文关键字:组合 SelectionChangedEventHandler 方法 其他 创建 是否 | 更新日期: 2023-09-27 18:03:36

我在c#和使用silverlight5工作。我遇到了一个问题,我必须使用c#(不是xaml)创建组合框,因为我动态地做它。

我已经使用SelectionChangedEventHandler来这样做,但我想用其他方式替换它,但不知道该用哪种方式?

目前我有这个工作代码:

 ComboBox cb = new ComboBox();
 if (param.Type == "ComboBox") // I am reading xml if there is ComboBox in its node then i create combo box using c# and this "param" is an object
 {
     TextBlock txtblk2 = new TextBlock(); //This textBlock is to print the selected value from Combo Box
     cb.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
     cb.SelectedIndex = cb.Items.Count - 1;
     txtblk2.Text = cb.SelectedValue.ToString() + " millions";
 }
 void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
 {
     MessageBox.Show("comboBox1_SelectionChanged1");
     txtblk2.Text = cb.SelectedValue.ToString() + " millions";
     txtblk2.FontSize = 14;
 }

谁能给我写一个等效的方法来实现相同的使用c#(不是Xaml),必须支持silverlight5 ?那会帮大忙的。谢谢。

实际上,我将有xml动态的结构,我不知道,我将反序列化它,我将使用它的对象获得访问xml节点值,如果我遇到任何节点有<Type>ComboBox<Type>,然后我将创建组合框,我已经创建了上面(使用选择改变事件)相同,我必须实现,但不使用xaml和选择改变事件。

是否有其他方法来创建使用c#的组合框(而不是SelectionChangedEventHandler)

为什么不使用XAML?您可以将ListBox与绑定到对象集合的项绑定,并将DataTemplate设置为例如:

<ListBox ItemSource="{Binding DynamicItems}">
     <ListBox.ItemTemplate>
        <DataTemplate>
            <ComboBox Text="{Binding Name}"/>
        </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

和后面的代码:

     if (param.Type == "ComboBox")
     {
          DynamicItem item = new DynamicItem(){Name="param.Name"};
          DynamicItems.Add(item);
     }

然后自动创建ComboBox。我更喜欢这种方式,因为在代码后面创建UI元素看起来很糟糕。

我知道这不是解决你问题的办法,你必须根据你的问题调整它。

您可以通过编程方式设置绑定……但是,我再次强烈建议你阅读DataTemplates,你不会对你的"仅c#代码"方法感到满意。

if (param.Type == "ComboBox")
{
    ComboBox cb = new ComboBox();
    TextBlock tb = new TextBlock(){FontSize = 14};
    tb.SetBinding(TextBlock.TextProperty,
      new Binding("SelectedValue")
      {
         Source = cb, StringFormat = "{0} millions"
      });
}