Windows Phone如果画布填充颜色等于颜色

时间:2014-08-04 16:02:16

标签: c# xaml canvas windows-phone

我很吵。所以我想要做的是切换画布元素的颜色,当tappnig在它上面。我已经可以改一次了。现在我想把它改回去,当我第二次点击它时。

这是行

<Canvas x:Name="N" Width="339.667" Height="349" Canvas.Left="0" Canvas.Top="0">
   <Path x:Name="Path" Width="94" Height="89" Canvas.Left="118.833" Canvas.Top="-7.62939e-006" Stretch="Fill" Fill="White" Tap="Tap_N" Data="F1 M 165.833,-7.62939e-006L 212.833,89L 165.333,68L 118.833,89L 165.833,-7.62939e-006 Z "/>
</Canvas>

 private void Tap_N(object sender, System.EventArgs e)
    {
        if (Path.Fill.Equals(Colors.White))
        {
            SolidColorBrush mySolidColorBrush = new SolidColorBrush();
            mySolidColorBrush.Color = Colors.Transparent;

            System.Windows.Shapes.Path Path = (System.Windows.Shapes.Path)sender;
            Path.Fill = mySolidColorBrush;
        }
        else
        {
            SolidColorBrush mySolidColorBrush = new SolidColorBrush();
            mySolidColorBrush.Color = Colors.White;

            System.Windows.Shapes.Path Path = (System.Windows.Shapes.Path)sender;
            Path.Fill = mySolidColorBrush;
        }
    }

所以我知道,我无法用Path.Fill.Equals做到这一点。但是我怎么能问,如果这条画布路径恰好是这种或那种颜色。 我还读了一些关于

的内容
public override sealed bool Equals(Object obj)
我必须这样解决吗?如果是,那它将如何运作? 希望你能得到这个想法,我希望有人可以帮助我,因为我说我对此很陌生。 感谢

1 个答案:

答案 0 :(得分:1)

表达式Path.Fill.Equals(Colors.White)始终为false,因为它会比较两种不同类型的对象。 Path.Fill的类型为Brush,而Colors.White的类型为Color

您可以通过在XAML中创建SolidColorBrush并在后面的代码中检查并更新其Color来强烈简化您的代码:

<Path Tap="Tap_N" ...>
    <Path.Fill>
        <SolidColorBrush Color="White"/>
    </Path.Fill> 
</Path>

代码:

private void Tap_N(object sender, System.EventArgs e)
{
    var path = (Path)sender;
    var fill = (SolidColorBrush)path.Fill;

    if (fill.Color == Colors.White)
    {
        fill.Color = Colors.Transparent;
    }
    else
    {
        fill.Color = Colors.White;
    }
}