我试图在ListBox
中显示所有颜色。使用example
这里是代码
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="All Colors"
Width="640" Height="480" >
<Window.Resources>
<ObjectDataProvider MethodName="GetType"
ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp">
<ObjectDataProvider.MethodParameters>
<sys:String>System.Windows.Media.Colors, PresentationCore,
Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}"
MethodName="GetProperties" x:Key="colorPropertiesOdp">
</ObjectDataProvider>
</Window.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Rectangle Fill="{Binding Path=Name}" Stroke="Black" Margin="4" StrokeThickness="1" Height="50" Width="81"/>
<Label Content="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Window>
我希望从ListBox selectedItem
得到System.Windows.Media.Color
的所选颜色。但是当我将所选项目转换为Color
答案 0 :(得分:2)
那是因为listbox.SelectedItem
的类型为System.Reflection.PropertyInfo
。它所引用的是保持所选颜色的System.Windows.Media.Color
类的静态属性。
System.Reflection.PropertyInfo prop = (System.Reflection.PropertyInfo)listbox.SelectedItem;
Color color = (Color)prop.GetValue(null, null);
string colorName = prop.Name;
color
即被选中的System.Windows.Media.Color
,colorName
是该属性的名称(例如Azure
或Aquamarine
)。
答案 1 :(得分:0)
查看您的XAML,您还没有给出您尝试从名称中获取值的列表框。因此,我不确定为什么获取所选颜色的代码不会引发错误。
当我想从某种形式的ListView中获取值时,我会做两件事。
首先在视图模型中添加一个属性,或者在后面添加代码以保存所选颜色。
Color selectedColor {get; set;}
然后稍微更改ListBox XAML的开头,以便将所选值绑定到此属性。所以你的XAML会这样开始:
<ListBox ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
SelectedValue={Binding selectedColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"}
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto" >
然后你应该能够从&#39; selectedColor&#39;中读取所选的值。属性。