Практическое руководство. Получение или определение свойств размещения холста
В этом примере показано, как использовать методы размещения элемента Canvas для размещения содержимого дочерних элементов. В этом примере используется содержимое в ListBoxItem для представления значений размещения и преобразования их в экземпляры Double, который является обязательным аргументом для позиционирования. Значения преобразуются обратно в строки и отображаются в виде текста в TextBlock элемента с помощью GetLeft метод.
Пример
В следующем примере создается ListBox элемент, который содержит одиннадцать выбираемых ListBoxItem элементов. SelectionChanged Триггеров событий ChangeLeft
пользовательский метод, который определяет последующего блока кода.
Каждый ListBoxItem представляет Double значение, которое является одним из аргументов, SetLeft метод Canvas принимает. Чтобы использовать ListBoxItem для представления экземпляра Double, необходимо сначала преобразовать ListBoxItem для правильного типа данных.
<ListBox Grid.Column="1" Grid.Row="1" VerticalAlignment="Top" Width="60" Margin="10,0,0,0" SelectionChanged="ChangeLeft">
<ListBoxItem>Auto</ListBoxItem>
<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 выбора, он вызывает ChangeLeft
пользовательский метод. Этот метод передает ListBoxItem для LengthConverter объект, который преобразует Content из ListBoxItem к экземпляру Double (Обратите внимание, что это значение уже был преобразован в String с помощью ToString метод). Это значение затем передается обратно в SetLeft и GetLeft методы Canvas Чтобы изменить положение text1
объекта.
private void ChangeLeft(object sender, SelectionChangedEventArgs args)
{
ListBoxItem li = ((sender as ListBox).SelectedItem as ListBoxItem);
LengthConverter myLengthConverter = new LengthConverter();
Double db1 = (Double)myLengthConverter.ConvertFromString(li.Content.ToString());
Canvas.SetLeft(text1, db1);
String st1 = (String)myLengthConverter.ConvertToString(Canvas.GetLeft(text1));
canvasLeft.Text = "Canvas.Left = " + st1;
}