2015-05-01 2 views
1

У меня есть вопрос. Я хочу изменить высоту строки, созданной в XAML, но в коде, в зависимости от нескольких условий, не связанных с самой линией. Код XAML для линии выглядит следующим образом:Изменить свойство строки в XAML в коде

<Line 
      Name="Linie5" 
      X1="10" Y1="70" 
      X2="670" Y2="70" 
      Stroke="Black" 
      StrokeThickness="1"/> 

Теперь, когда я иду в .cs файл Я хочу, чтобы выбрать линию по его имени и изменять его высоту, все это в button_pressed случае.

private void butonParametri_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (Line l in canvas1.Children) 
     { 
      if (l.Name == "Linie5") 
       l.Y2 = l.Y2 + 15; 
     } 
    } 

Я получаю ошибку в том, что объект метки типа не может быть приведен к объекту типа линии прямо в операторе Еогеаспа. Как я могу это исправить?

ответ

0

холст включает ребенок других типов (например, Label), но вы собираетесь проверить имена Line элементов, и он не может бросить все из этих детей в Line поэтому сначала вы должны получить Line ребенок, то их перечислять.

Используйте OfType<T>(), поэтому в цикле foreach будут использоваться только дети такого типа. Вот код:

foreach (Line l in canvas1.Children.OfType<Line>()) 
{ 
    //identical to your code 
} 
+0

Благодаря Хоссейн, это сделал трюк с кодом, который у меня уже был. Клеменс также дал мне подсказку о том, как напрямую получить доступ к собственности линии, не ища ее! Оба ответа были великолепны! – user2671364

+0

@ user2671364 рад быть полезным –

3

Набор x:Name вместо Name

<Line x:Name="Linie5" ... /> 

и прямой доступ к экземпляру линии сгенерированной переменной-члена в коде позади:

Linie5.Y2 += 15; 
+0

Wow! Поэтому мы должны рассмотреть проблему не сложную, тогда возникнут гораздо более простые решения. –

+0

Спасибо, Клеменс, не думал об этом! – user2671364

Смежные вопросы