是否有其他方法来创建使用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和选择改变事件。
为什么不使用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"
});
}