所以我有一个简单的问题;我想在ComboBox中显示System.Windows.Visibility
枚举。但是,我似乎没有找到它的路径。像一个疯子一样搜索,但找不到任何知道这个枚举的人。
我知道这可以在代码中完成(并且已经有了它)但我更喜欢在XAML中完成。
有人可以帮帮我吗?
答案 0 :(得分:3)
瞧:
<ComboBox SelectedIndex="0">
<Visibility>Visible</Visibility>
<Visibility>Collapsed</Visibility>
<Visibility>Hidden</Visibility>
</ComboBox>
不需要额外的命名空间。
答案 1 :(得分:0)
@ Maciek的解决方案是最简单,最快速的解决方案,但更常见的纯 XAML 列出枚举值的方法是这样的:
<FrameworkElement.Resources>
<ObjectDataProvider x:Key="ItemsSource"
ObjectType="{x:Type sys:Enum}"
MethodName="GetValues"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Visibility" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</FrameworkElement.Resources>
(...)
<ComboBox ItemsSource="{Binding Source={StaticResource ItemsSource}}" />
然后,您只需将Visibility
替换为任何其他枚举类型即可获取其值列表。
答案 2 :(得分:0)
如果要将枚举值绑定到ItemsSource,则需要ViewModel中具有枚举值的属性。您必须将ItemsSource绑定到此属性。你得到这样的枚举值:
Enum.GetValues(typeof(EffectStyle)).Cast<EffectStyle>();
如果找不到属性的路径,则表示您的DataContext错误。如果您没有使用MVVM,请将其设置为ViewModel类或窗口。在最简单的场景中,您可以在Window构造函数中将DataContext设置为您的窗口。
this.DataContext = this;
查看this或this链接,作为WPF中DataContext和Binding的大图。 如果您有兴趣,还可以阅读WPF中的MVVM。您可以使用MVVM Light
如果你想要一个完整的xaml解决方案,你的枚举绑定到ComboBox,你可以像this一样写或者像here一样使用ObjectDataProvider
。
我认为Maciek的解决方案在你的情况下已经足够好了。
答案 3 :(得分:0)
如果您想使用代码执行此操作,请假设您的组合框具有x:name = my combo,您可以这样做:
mycombo.ItemsSource = Enum.GetValues(typeof(Visibility)).Cast<Visibility>();