更新:2007 年 11 月
此示例演示如何将 ListBoxItem 的内容转换为 Thickness 的实例。虽然此示例专门演示了如何将 ListBoxItem 转换为 Thickness 的实例,但也演示了如何使用任何兼容的类型转换器来转换 ListBoxItem。
示例
下面的示例将创建一个具有十个可选 ListBoxItem 对象的 ListBox 元素。SelectionChanged 事件触发 ChangeMargin 自定义方法,后面的代码示例将定义该方法。
在可扩展应用程序标记语言 (XAML) 示例中,每个 ListBoxItem 都表示一个 Thickness 值,该值用于描述元素的统一边距。但是,在使用 ListBoxItem 表示 Thickness 的实例之前,必须先将其转换为正确的数据类型。后面的代码示例演示该转换。
<ListBox Grid.Row="0" Grid.Column="1"
Width="50" Height="50"
VerticalAlignment="Top"
SelectionChanged="ChangeMargin">
<ListBoxItem>10</ListBoxItem>
<ListBoxItem>20</ListBoxItem>
<ListBoxItem>30</ListBoxItem>
<ListBoxItem>40</ListBoxItem>
<ListBoxItem>50</ListBoxItem>
<ListBoxItem>60</ListBoxItem>
<ListBoxItem>70</ListBoxItem>
<ListBoxItem>80</ListBoxItem>
<ListBoxItem>90</ListBoxItem>
<ListBoxItem>100</ListBoxItem>
</ListBox>
当用户更改 ListBox 选择时,更改操作将调用事件处理程序 ChangeMargin。此方法将 ListBoxItem 传递给 ThicknessConverter 对象,该对象将 ListBoxItem 的 Content 属性转换为 Thickness 的实例 (请注意,已经通过使用 ToString 方法将 Content 的值转换为字符串)。然后,将该值设置为 text1 对象的 Margin。
Private Sub ChangeMargin(ByVal sender As Object, ByVal args As SelectionChangedEventArgs)
Dim li As ListBoxItem = CType(CType(sender, ListBox).SelectedItem, ListBoxItem)
Dim myThicknessConverter As ThicknessConverter = New ThicknessConverter()
Dim th1 As Thickness = CType(myThicknessConverter.ConvertFromString(li.Content.ToString()), Thickness)
text1.Margin = th1
Dim st1 As String = CType(myThicknessConverter.ConvertToString(text1.Margin), String)
gridVal.Text = "The Margin property is set to " + st1 + "."
End Sub
private void ChangeMargin(object sender, SelectionChangedEventArgs args)
{
ListBoxItem li = ((sender as ListBox).SelectedItem as ListBoxItem);
ThicknessConverter myThicknessConverter = new ThicknessConverter();
Thickness th1 = (Thickness)myThicknessConverter.ConvertFromString(li.Content.ToString());
text1.Margin = th1;
String st1 = (String)myThicknessConverter.ConvertToString(text1.Margin);
gridVal.Text = "The Margin property is set to " + st1 +".";
}
有关完整示例,请参见网格边距的更改示例。