如何判断WPF 中rectangle或者Ellipse的.fill中的颜色是否是当前颜色

qq_27607885 2017-01-09 11:51:13
最近在实验一个功能 判断当前 Canvas画布上的圆的颜色是否是Colors.DeepSkyBlue 但是实验过程中 明明我把圆的颜色用改成一样的还是不能识别出来
(element as Ellipse).Fill = new SolidColorBrush(Colors.DeepSkyBlue);//遍历画布上的圆 颜色赋值

通过打断点 发现 颜色的值是一样的 但是判断结果的bool值就是false 难道类型不一样?
实际画面中颜色也变成Colors.DeepSkyBlue 但是就是后台判断的结果 颜色却不是相等?why?






下面是判断颜色部分的代码 请大侠帮助分析一下 难道颜色赋值的时候 是传地址??

private Point[] getSelectingPoints()//获取当前选中点的数组
{
int Point_Num = Point_Statistics();//统计当前画布内 所有焊点的数量
Point[] SelectingPoints = new Point[Point_Num];

foreach (UIElement element in Border_Canvas.Children)//遍历当前画布内的点
{
if (element is Ellipse)
{
SolidColorBrush Colors_temp = new SolidColorBrush(Colors.DeepSkyBlue);
bool isDeepSkyBlue = ((element as Ellipse).Fill==Brushes.DeepSkyBlue);

if (isDeepSkyBlue)//判断当前点是不是选中的点 如果是就将数据存入数组
{
Point point_temp = new Point();
point_temp.X = (element as Ellipse).Margin.Left;
point_temp.Y = (element as Ellipse).Margin.Top;
SelectingPoints[i] = point_temp;//将当前点信息存入点数组SelectingPoints[i]
}
}
}

return SelectingPoints;//返回获得的选中的点数组(无序排列,阵列复制也不需要顺序)
}

...全文
750 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
a512492145 2017-11-01
  • 打赏
  • 举报
回复
btnBroadcast.Background.ToString() == blue.ToString() 这个样子就行
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复
引用 9 楼 shingoscar 的回复:
[quote=引用 6 楼 qq_27607885 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 请问哪句话是在判断颜色相不相等?
这句 哥哥哎 bool isDeepSkyBlue = ((element as Ellipse).Fill == Colors_temp);//这里刚刚我实验的 应该是Colors_temp 求指导[/quote] 都重点标出颜色2个字了,怎么还不明白呢?Colors_temp是颜色吗?不是你给个变量名叫临时颜色他就是颜色了[/quote] 我给Colors_temp赋值了啊 SolidColorBrush Colors_temp = new SolidColorBrush(Colors.DeepSkyBlue);难道不是吗
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复
引用 8 楼 Forty2 的回复:
试试这样比较(Color可以用==号比较):
var solidColorBrush = (element as Ellipse).Fill as SolidColorBrush;
bool isDeepSkyBlue = solidColorBrush != null && solidColorBrush.Color == Colors.DeepSkyBlue;
OK 成功了 谢谢指导
Poopaye 2017-01-09
  • 打赏
  • 举报
回复
引用 6 楼 qq_27607885 的回复:
[quote=引用 1 楼 shingoscar 的回复:] 请问哪句话是在判断颜色相不相等?
这句 哥哥哎 bool isDeepSkyBlue = ((element as Ellipse).Fill == Colors_temp);//这里刚刚我实验的 应该是Colors_temp 求指导[/quote] 都重点标出颜色2个字了,怎么还不明白呢?Colors_temp是颜色吗?不是你给个变量名叫临时颜色他就是颜色
Forty2 2017-01-09
  • 打赏
  • 举报
回复
试试这样比较(Color可以用==号比较):
var solidColorBrush = (element as Ellipse).Fill as SolidColorBrush;
bool isDeepSkyBlue = solidColorBrush != null && solidColorBrush.Color == Colors.DeepSkyBlue;
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复
引用 5 楼 xinweilee 的回复:
SolidColorBrush s = new SolidColorBrush(Colors.DeepSkyBlue); bool isdeep = s.Color.Equals(Brushes.DeepSkyBlue.Color);
哥 重点是 ellipse没有color只有fill属性 这个我试过 把==换成.Equals没用
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
请问哪句话是在判断颜色相不相等?
这句 哥哥哎 bool isDeepSkyBlue = ((element as Ellipse).Fill == Colors_temp);//这里刚刚我实验的 应该是Colors_temp 求指导
xinweilee 2017-01-09
  • 打赏
  • 举报
回复
SolidColorBrush s = new SolidColorBrush(Colors.DeepSkyBlue); bool isdeep = s.Color.Equals(Brushes.DeepSkyBlue.Color);
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复
引用 2 楼 Forty2 的回复:
至少有如下错误: bool isDeepSkyBlue = ((element as Ellipse).Fill==Brushes.DeepSkyBlue);这行有误。 SolidColorBrush没有重载==操作符号,以上比较永不成立。
那么怎么比较啊
qq_27607885 2017-01-09
  • 打赏
  • 举报
回复

private Point[] getSelectingPoints()//获取当前选中点的数组
        { 
            int Point_Num = Point_Statistics();//统计当前画布内 所有焊点的数量
            Point[] SelectingPoints = new Point[Point_Num];
                 
            foreach (UIElement element in Border_Canvas.Children)//遍历当前画布内的点
            {
                if (element is Ellipse)
                {
                    SolidColorBrush Colors_temp = new SolidColorBrush(Colors.DeepSkyBlue);
                    bool isDeepSkyBlue = ((element as Ellipse).Fill == Colors_temp);//这里刚刚我实验的 应该是Colors_temp  求指导

                    if (isDeepSkyBlue)//判断当前点是不是选中的点 如果是就将数据存入数组   为啥判断不成功!!!难道是传地址???
                    {
                        Point point_temp = new Point();
                        point_temp.X = (element as Ellipse).Margin.Left;
                        point_temp.Y = (element as Ellipse).Margin.Top;
                        SelectingPoints[i] = point_temp;//将当前点信息存入点数组SelectingPoints[i]
                    }
                }
            }

            return SelectingPoints;//返回获得的选中的点数组(无序排列,阵列复制也不需要顺序)    
        }
Forty2 2017-01-09
  • 打赏
  • 举报
回复
至少有如下错误: bool isDeepSkyBlue = ((element as Ellipse).Fill==Brushes.DeepSkyBlue);这行有误。 SolidColorBrush没有重载==操作符号,以上比较永不成立。
Poopaye 2017-01-09
  • 打赏
  • 举报
回复
请问哪句话是在判断颜色相不相等?
exception92 2017-01-09
  • 打赏
  • 举报
回复
这个在wpf版块不是已经解决了么
Poopaye 2017-01-09
  • 打赏
  • 举报
回复
引用 11 楼 qq_27607885 的回复:
[quote=引用 9 楼 shingoscar 的回复:] [quote=引用 6 楼 qq_27607885 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 请问哪句话是在判断颜色相不相等?
这句 哥哥哎 bool isDeepSkyBlue = ((element as Ellipse).Fill == Colors_temp);//这里刚刚我实验的 应该是Colors_temp 求指导[/quote] 都重点标出颜色2个字了,怎么还不明白呢?Colors_temp是颜色吗?不是你给个变量名叫临时颜色他就是颜色了[/quote] 我给Colors_temp赋值了啊 SolidColorBrush Colors_temp = new SolidColorBrush(Colors.DeepSkyBlue);难道不是吗[/quote] Brush是刷子的意思

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧