Практическое руководство. Преобразование ListBoxItem к новому типу данных
Обновлен: Ноябрь 2007
В этом примере демонстрируется преобразование содержимого ListBoxItem в экземпляр Thickness. Хотя в этом примере демонстрируется способ преобразования ListBoxItem в экземпляр Thickness, в нем также показывается, как можно использовать любой совместимый преобразователь типов для преобразования ListBoxItem.
Пример
В следующем примере создается элемент ListBox, который содержит десять выбираемых объектов ListBoxItem. Событие SelectionChanged инициирует пользовательский метод ChangeMargin, который определяется в следующем примере кода.
В примере Язык XAML (Extensible Application Markup Language) каждый 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, который преобразует Content из ListBoxItem в экземпляр Thickness. (Обратите внимание, что значение Content уже было преобразовано в строку с помощью метода ToString). Это значение затем устанавливается в Margin объекта text1.
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