C# 如何获取画布的元素?

C# 如何获取画布的元素?,c#,wpf,xaml,object,canvas,C#,Wpf,Xaml,Object,Canvas,如何获取画布的元素 我有这个: <Canvas x:Name="can" HorizontalAlignment="Left" Height="502" Margin="436,0,0,0" VerticalAlignment="Top" Width="336" OpacityMask="#FFC52D2D"> <Canvas.Background> <SolidColorBrush Color="{DynamicResource {x:St

如何获取画布的元素

我有这个:

<Canvas x:Name="can" HorizontalAlignment="Left" Height="502" Margin="436,0,0,0" VerticalAlignment="Top" Width="336" OpacityMask="#FFC52D2D">
    <Canvas.Background>
        <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}"/>
    </Canvas.Background>
    <Button x:Name="btn_twoThreads" Content="Two Threads" Height="32" Canvas.Left="195" Canvas.Top="460" Width="131" Click="btn_twoThreads_Click"/>
    <Button x:Name="btn_oneThread" Content="One Thread" Height="32" Canvas.Left="10" Canvas.Top="460" Width="131" Click="btn_oneThread_Click"/>
    <Rectangle Fill="#FFF4F4F5" Height="55" Canvas.Left="10" Stroke="Black" Canvas.Top="388" Width="316"/>
</Canvas>
我知道我可以通过在XAML中给矩形对象一个变量名来访问它,但是画布对象在不同的类中被绘制,如果矩形已经包含在画布中,我不想将它传递给每个类。

您可以尝试以下方法:

// to show that you'll get an enumerable of rectangles.
IEnumerable<Rectangle> rectangles = can.Children.OfType<Rectangle>();

foreach(var rect in rectangles)
{
    // do something with the rectangle
}

Trace.WriteLine("Found " + rectangles.Count() + " rectangles");
//显示将获得可枚举的矩形。
IEnumerable矩形=can.Children.OfType();
foreach(矩形中的变量矩形)
{
//用这个长方形做点什么
}
Trace.WriteLine(“找到”+矩形.Count()+矩形”);

type()的
非常有用,因为它检查类型,并且仅在类型正确时才生成项。(它已经铸造了)

可以。孩子们[2]
会把你变成长方形。你有什么错误吗?如果我理解正确的话,你可以把它作为一个自定义用户控件来编写,并根据需要公开按钮/矩形的公共getter。特别是如果(从听起来)您在多个地方使用相似/相同的画布标记。如果您知道它们是什么类型,您可以执行以下操作:
// to show that you'll get an enumerable of rectangles.
IEnumerable<Rectangle> rectangles = can.Children.OfType<Rectangle>();

foreach(var rect in rectangles)
{
    // do something with the rectangle
}

Trace.WriteLine("Found " + rectangles.Count() + " rectangles");