WPF:从样式/资源加载组合框项目
问题描述:
我有几个组合框具有相同的项目。我想将项目放入app.xaml
,以防止代码重复。我可以做这样的事吗?WPF:从样式/资源加载组合框项目
<Style x:Key="MyCombo" TargetType="{x:Type ComboBox}">
<Setter Property="Items">
<ComboboxItem Content="item one" />
<ComboboxItem Content="item two" />
</Setter>
</Style>
答
您可以创建一个Style
的ItemsSource
属性设置为一个集合:
<Style TargetType="ComboBox" x:Key="MyCombo" xmlns:c="clr-namespace:System.Collections;assembly=mscorlib">
<Setter Property="ItemsSource">
<Setter.Value>
<c:ArrayList>
<ComboBoxItem>item one</ComboBoxItem>
<ComboBoxItem>item two</ComboBoxItem>
</c:ArrayList>
</Setter.Value>
</Setter>
</Style>
你也可以定义一个ComboBox
实例作为一个资源:
<ComboBox x:Key="MyCombo" x:Shared="False">
<ComboBoxItem Content="item one" />
<ComboBoxItem Content="item two" />
</ComboBox>
而且使用它像这个:
<ContentControl Content="{StaticResource MyCombo}" />
第三个选择是创建一个自定义ComboBox
控制,增加了普通ComboBoxItem
S:
public class MyCombo : ComboBox
{
public MyCombo()
{
Items.Add(new ComboBoxItem() { Content = "item one" });
Items.Add(new ComboBoxItem() { Content = "item two" });
}
}
,创造这一个实例:
<local:MyCombo />
首先一个看起来很整齐,但我当使用ContentControl时不能覆盖属性。例如,我必须将'SelectedValue'绑定到不同的属性。 – Zergatul
请看我编辑的答案。您可以将ItemsSource属性设置为一个集合。 – mm8
谢谢@ mm8,那就是我一直在寻找的东西。 – Zergatul