【问题标题】:Windows Phone If Canvas Fill Color Equals ColorWindows Phone 如果画布填充颜色等于颜色
【发布时间】:2014-08-04 16:02:15
【问题描述】:

我是个新手。所以我想做的是在对其进行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)

我必须这样解决吗?如果是,那么它将如何工作? 希望你能明白,我希望有人能帮助我,正如我所说,我对此很陌生。 谢谢

【问题讨论】:

    标签: c# xaml canvas windows-phone


    【解决方案1】:

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

    您可以通过在 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;
        }
    }
    

    【讨论】:

    • 我明白了,效果很好,非常感谢!