在这个问题上,我将如何将UIElement
转换为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
。
还可以使用 Linq 遍历网格的子项,筛选请求的类型并选择第一个类型:
CartesianChart ch = Grid.Children.OfType<CartesianChart>().FirstOrDefault();
老实说,您的代码遍历网格的所有子项,并将每个CartesianChart
分配给您的变量。因此,在完成for
循环后,找到的最后一个匹配元素将存储在变量中。
如果这是您想要的行为,请使用以下代码:
CartesianChart ch = Grid.Children.OfType<CartesianChart>().LastOrDefault();
您可以使用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
(如果可以有多个,则应执行其他检查)。