将 UIE 转换为对象?



在这个问题上,我将如何将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(如果可以有多个,则应执行其他检查)。

相关内容

  • 没有找到相关文章

最新更新