Преобразовать UIElement в объект? - PullRequest
0 голосов
/ 01 апреля 2020

Как мне go преобразовать UIElement в a, в этой задаче CartesianChart (LiveCharts).

В этом коде я проверяю сетку на CartesianChart и тогда я хочу сохранить его (в ch).

            CartesianChart ch;

            for (int i = 0; i < Grid.Children.Count; i++)
            {
                var temp = Grid.Children[i].GetType();
                if (temp.Name == "CartesianChart")
                {
                    ch = Grid.Children[i];
                }
            }
            ch.Name = "Chart";
            ch.Margin = new Thickness(0, 0, 250, 125);
            ch.Series = new SeriesCollection

Там написано are you missing a cast?, но я не уверен, как привести UIElement к Object.

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Вы также можете использовать Linq для обхода дочерних элементов вашей сетки, фильтрации запрошенного типа и выбора первого:

CartesianChart ch = Grid.Children.OfType<CartesianChart>().FirstOrDefault();

Если честно, ваш код пересекает все дочерние элементы вашей сетки. и присваивает каждые CartesianChart вашей переменной. Поэтому после того, как он завершится с for l oop, последний найденный соответствующий элемент будет сохранен в переменной.
Если это ваше поведение, используйте этот код:

CartesianChart ch = Grid.Children.OfType<CartesianChart>().LastOrDefault();
0 голосов
/ 01 апреля 2020

Вы можете использовать as оператор

 ch = Grid.Children[i] as CartesianChart;

или приведение оператор

ch = (CartesianChart)Grid.Children[i];

Основное различие между ними объясняется здесь

Я бы рекомендовал использовать первый подход. Это может выглядеть как

 CartesianChart ch = null; // this lets avoid a compiler warning about using uninitialized vars
 for (int i = 0; i < Grid.Children.Count; i++)
 {
    ch = Grid.Children[i] as CartesianChart;
    if (ch != null)
    {
       break;
    }
 }
 if (ch != null)
 {
     ch.Name = "Chart";
     ch.Margin = new Thickness(0, 0, 250, 125);
     ch.Series = new SeriesCollection ...
 }

Пожалуйста, примите во внимание, что этот код найдет первый CartesianChart в сетке (если у вас может быть несколько, вы должны выполнить дополнительные проверки).

...