0

私は問題があります。Canvas:canvas1の内側にあるEllipse:ellipse1があります。ellipse1をクリックすると、塗りつぶしがWhiteからPaleVioletRedに変わります。canvas1の別の部分をクリックすると、楕円がそこに移動します。これは機能します。

ellipse1をもう一度クリックしても、塗りつぶしの色は変わりません。

どうしたの?...

ellipse1用のこのXAMLコードがあります。

<Ellipse Height="35" HorizontalAlignment="Left" Name="ellipse1" Stroke="Black" VerticalAlignment="Top" Width="70" Fill="White" StrokeThickness="3" Canvas.Left="71" Canvas.Top="70" MouseDown="pion_alb1_md"/>

これはC#の部分です:

private void pion_alb1_md(object sender, EventArgs e)
{
    if (ellipse1.Fill == Brushes.White)
    {
        ellipse1.Fill = Brushes.PaleVioletRed;
    }
    else
    {
        ellipse1.Fill = Brushes.White;
    }
}

これはcanvas1のXAMLコードです。

<Canvas Name="piese_canvas" MouseDown="mouse_down_canvas_piese" Background="#43FCFFEB">
.......
</Canvas>

...そしてこれがcanvas1のC#部分です:

private void mouse_down_canvas_piese(object sender, EventArgs e)
{
    if (ellipse1.Fill == Brushes.PaleVioletRed)
    {            
        Point c = Mouse.GetPosition(piese_canvas);

        if ((c.X > 81) && (c.Y < 311) && (c.X <160) && (c.Y >191))
        {
            Canvas.SetLeft(ellipse1, 72);
            Canvas.SetTop(ellipse1, 241);
            ellipse1.Fill = Brushes.White;
            Canvas.SetLeft(ellipse5, -12);
            Canvas.SetTop(ellipse5, 241);
        }
    }
}
4

2 に答える 2

2

楕円形のマウスのハンドルを次のように変更します。設定しない場合e.Handled = true、マウスイベントもキャンバスによって処理され、mouse_down_canvas_piese直後に呼び出されます。また、楕円を移動した後、ほぼ完全に「アクティブ領域」にあるため、FillにリセットされWhiteます。

あなたはデバッグによってこれを見つけることができたでしょう。Topまた、新しい値とLeft値は241と72にハードコードされているため、楕円が別の位置に移動することはありません。

private void pion_alb1_md(object sender, RoutedEventArgs e)
{
    if (ellipse1.Fill == Brushes.White)
    {
        ellipse1.Fill = Brushes.PaleVioletRed;
    }
    else
    {
        ellipse1.Fill = Brushes.White;
    }
    e.Handled = true;
}
于 2012-07-19T12:37:31.520 に答える