Практическое руководство. Изменение свойства Margin
Обновлен: Ноябрь 2007
В этом примере демонстрируется, как изменить свойство Margin дочернего элемента, находящегося в объекте Grid. В данном примере значения позиционирования представлены как содержимое объекта ListBoxItem. Данные значения преобразуются в экземпляры класса Thickness, значения которого требуются свойству Margin. Затем значения преобразуются обратно в строку и отображаются как элемент управления TextBlock.
Пример
В следующем примере создается элемент управления ListBox, в котором содержится десять выбираемых элементов. Событие 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. (Обратите внимание, что данное значение уже было преобразовано в строку с помощью метода 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 +".";
}
Полный пример см. в разделе Пример изменения полей в таблице.
См. также
Задачи
Практическое руководство. Преобразование ListBoxItem к новому типу данных
Практическое руководство. Использование объекта ThicknessConverter