WPF中无法正确检查矩形Fill状态问题求助
解决WPF矩形Fill属性判断失败的问题
你遇到的问题核心是引用相等与值相等的差异:BrushConverter.ConvertFromString每次调用都会生成一个全新的SolidColorBrush实例——哪怕颜色值完全一致,两个实例在内存中的引用地址也不相同。而你用==判断时,默认是比较对象的引用,自然匹配不上。
下面给你几种可行的解决方案:
方案1:比较Brush的Color属性
直接对比颜色的具体值,不管Brush实例是不是同一个,只要颜色值一致就能匹配:
// 先判断Fill是SolidColorBrush类型,避免类型转换异常 if (RMaximize.Fill is SolidColorBrush currentBrush && currentBrush.Color == CustomGreen.Color) { Driver.Manage().Window.Maximize(); }
方案2:使用Brush的Equals方法
SolidColorBrush重写了Equals方法,会对比颜色值而非引用地址,所以可以直接调用:
// 先判断Fill不为null,避免空引用异常 if (RMaximize.Fill != null && CustomGreen.Equals(RMaximize.Fill)) { Driver.Manage().Window.Maximize(); }
方案3:确保复用同一个Brush实例
如果你能保证所有设置Fill的地方都只用你预先定义的CustomGreen和CustomRed实例(就像你现在的点击切换代码那样),那其实也可以用==判断——但这种方式风险较高,一旦其他地方用了相同颜色的新Brush实例,判断就会失效,所以更推荐前两种方案。
内容的提问来源于stack exchange,提问作者Sen
相关产品推荐
相关产品推荐

