0

キャンバスの要素を取得するにはどうすればよいですか?

私はこれを持っています:

<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 コードのこのキャンバスにはいくつかのオブジェクトがあります。Rectangle オブジェクトの詳細を取得する必要があります。

Rectangle r; 

r = can.Children[2] as Rectangle; //I know this probably doesn't retrieve the rectangle object, but hopefully you can see what I am trying to achieve.

if (r != null)
{
    MessageBox.Show("It's a rectangle");
}

おそらく、XAML で変数名を指定するだけで Rectangle オブジェクトにアクセスできることはわかっていますが、キャンバス オブジェクトはさまざまなクラスで描画されており、四角形が既に存在する場合は、すべてのクラスに四角形を渡したくありません。キャンバスに含まれています。

4

1 に答える 1

9

これを試すことができます:

// 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");

OfType<>()タイプをチェックし、正しいタイプである場合にのみアイテムを生成するため、非常に便利です。(すでにキャストされています)

于 2013-10-12T21:40:20.533 に答える