1)SelectedItem绑定返回的实际值是ListBoxItem对象。要从绑定中获取值(15),您可以使用转换器或使绑定路径更加明确以获取列表框项的Content属性值:
Size="{Binding ElementName=Size, Path=SelectedItem.Content}"
2)这是一个协变操作,因此每个列表项的类型都是从其来源推断出来的。由字体系列项控件(ListBox)生成的项是它所绑定的集合的结果。 Items属性(通过ItemsSource依赖项属性填充)是一个泛型对象的ItemCollection,它采用相应上下文对象的类型。
名为SelectedItem的Path返回的实际值是多少?
它是 System.Windows.Controls.ListBoxItem:15 (你可以把它读作“内容设置为15的ListBoxItem”),这就是你的绑定不起作用的原因 - 它需要一个数值,而不是 ListBoxItem 。你可以指定 Path 如 SelectedItem.Content 使这项工作。你也可以设置 SelectedValuePath 列表框“大小”到“内容”,并绑定到 SelectedValue 财产而不是 SelectedItem 。
System.Windows.Controls.ListBoxItem:15
ListBoxItem
Path
SelectedItem.Content
SelectedValuePath
SelectedValue
SelectedItem
解决方案1:
<TextBlock Size="{Binding ElementName=Size, Path=SelectedItem.Content}" />
解决方案2:
<ListBox x:Name="Size" SelectedValuePath="Content" /> <TextBlock Size="{Binding ElementName=Size, Path=SelectedValue}" />
为什么FontFamily SelectItem有效?
因为ListBox包含字体集合,而不是ListBoxItems的集合(尽管它们仍然被创建以表示集合中的每个项目)。如果在代码中定义字体大小集合并将ListBox'es ItemsSource属性绑定到该集合或将ListBox的内容定义为集合,则可以使用字体大小实现相同的行为。 System.Double 值直接在XAML中:
System.Double
<ListBox x:Name="Size" xmlns:system="clr-namespace:System;assembly=mscorlib"> <system:Double>10</system:Double> <system:Double>15</system:Double> <system:Double>20</system:Double> </ListBox>