如何:将 ListBoxItem 转换到新的数据类型

更新: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 对象,该对象将 ListBoxItemContent 属性转换为 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 +".";
        }

有关完整示例,请参见网格边距的更改示例

请参见

任务

如何:更改 Margin 属性

如何:使用 ThicknessConverter 对象

参考

ListBox

ListBoxItem

ThicknessConverter