我很吵。所以我想要做的是切换画布元素的颜色,当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)
我必须这样解决吗?如果是,那它将如何运作?
希望你能得到这个想法,我希望有人可以帮助我,因为我说我对此很陌生。
感谢
答案 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;
}
}