You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别线条的二次点击并实现颜色切换重置功能?

问题原因

你这段代码的问题在于每次触发MouseDown事件时,都会创建全新的SolidColorBrush实例。C#中引用类型的==比较的是对象引用而非内容,所以line.Stroke == selectionBrush永远为false——因为每次的selectionBrush都是新对象,和之前设置的Stroke引用完全不同,导致永远只会执行else分支,无法切回黑色。

解决方法

有两种简单的修复方式:

方式一:复用Brush实例(推荐)

将两个Brush定义为类的成员变量,避免每次创建新实例,保证引用一致,就能正确判断状态:

// 在类内部定义成员变量
private readonly SolidColorBrush _selectionBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF490AF6"));
private readonly SolidColorBrush _blackBrush = new SolidColorBrush(Colors.Black);

private void Line_MouseDown(object sender, MouseButtonEventArgs e)
{
    Line line = (Line)sender;

    if (line.Stroke == _selectionBrush)
    {
        line.Stroke = _blackBrush;
    }
    else
    {
        line.Stroke = _selectionBrush;
    }    
}

方式二:比较Brush的Color属性

如果不想复用实例,也可以直接比较Brush的Color值,忽略引用差异:

private void Line_MouseDown(object sender, MouseButtonEventArgs e)
{
    Color selectionColor = (Color)ColorConverter.ConvertFromString("#FF490AF6");
    SolidColorBrush selectionBrush = new SolidColorBrush(selectionColor);
    SolidColorBrush blackBrush = new SolidColorBrush(Colors.Black);
    Line line = (Line)sender;

    // 比较Color属性而非对象引用
    if (line.Stroke is SolidColorBrush brush && brush.Color == selectionColor)
    {
        line.Stroke = blackBrush;
    }
    else
    {
        line.Stroke = selectionBrush;
    }    
}

注意:方式二每次创建新Brush会带来微小的性能开销,如果频繁点击线条,推荐使用方式一。

内容的提问来源于stack exchange,提问作者user20276370

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:05:19