纯色画笔颜色绑定问题



所以我在我的 ObjA 类上的"GroupColor"属性的 ATM 中遇到了一些绑定问题。我还有一个 CurrentState 变量,它根据其值返回一个 Brush(这在下面的转换器中完成(。

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace UIChemicalMelt
{
public class StateToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value)
{
case State.INACTIVE:
return Utilities.ResourceDictionary["HoverOverColourInactive"] as Brush;
case State.ACTIVE:
return Utilities.ResourceDictionary["HoverOverColourActive"] as Brush;
case State.ACTIVE_GROUP_SET:
return Utilities.ResourceDictionary["BackgroundBasedOnGroupColour"] as Brush;
case State.HIGHLIGHTED:
return Utilities.ResourceDictionary["HighlightThemeColour"] as Brush;
case State.PROCESSING:
return Utilities.ResourceDictionary["ProcessingWellColour"] as Brush;
default:
return Brushes.Transparent.Color;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

它用于我在 View XAML 中创建的按钮的控件模板触发器

<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" Value="{Binding CurrentState, Converter={StaticResource StateToColorConverter}}"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background" Value="{Binding CurrentState, Converter={StaticResource StateToColorConverter}}"/>
</Trigger>
</ControlTemplate.Triggers>

一切似乎都很好,但我收到一个 XAML 错误......

System.Windows.Data 错误:2:找不到治理框架元素 或目标元素的 FrameworkContentElement。 绑定表达式:路径=组颜色;数据项=空;目标元素为 'SolidColorBrush' (HashCode=46663997(;目标属性为"颜色" (类型"颜色"(

我不知道为什么tbh..

当你在 xaml 中简单地选择一种颜色时,WPF 将自动通过隐式转换器运行你的颜色,以将其包装在画笔中。 由于您提供自己的转换器,您将无法再从隐式 WPF 转换器中受益,因此您需要自己返回画笔。

这是您的示例,只需将"新 SolidColorBrush"添加到各个行中以满足背景绑定。

public class StateToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value)
{
case State.INACTIVE:
return new SolidColorBrush(Utilities.ResourceDictionary["HoverOverColourInactive"]);
case State.ACTIVE:
return new SolidColorBrush(Utilities.ResourceDictionary["HoverOverColourActive"]);
case State.ACTIVE_GROUP_SET:
return new SolidColorBrush(Utilities.ResourceDictionary["BackgroundBasedOnGroupColour"]);
case State.HIGHLIGHTED:
return new SolidColorBrush(Utilities.ResourceDictionary["HighlightThemeColour"]);
case State.PROCESSING:
return new SolidColorBrush(Utilities.ResourceDictionary["ProcessingWellColour"]);
default:
return Brushes.Transparent;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

抱歉,我的回答不能System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=GroupColour; DataItem=null; target element is 'SolidColorBrush' (HashCode=46663997); target property is 'Color' (type 'Color')解决您的问题,我认为您的代码不会发送此消息,我需要更多的代码。

但是您的转换器在此代码中返回Colorreturn Brushes.Transparent.Color.它将颜色设置为背景值类型为画笔的背景。

它还将在打开调试输出窗口时发送绑定消息。

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=CurrentState; DataItem=null; target element is 'Grid' (Name=''); target property is 'Background' (type 'Brush')

如何解决?尝试将return Brushes.Transparent.Color替换为Brushes.Transparent,您可以看到此代码。

switch (value)
{
case State.INACTIVE:
return Utilities.ResourceDictionary["HoverOverColourInactive"] as Brush;
case State.ACTIVE:
return Utilities.ResourceDictionary["HoverOverColourActive"] as Brush;
case State.ACTIVE_GROUP_SET:
return Utilities.ResourceDictionary["BackgroundBasedOnGroupColour"] as Brush;
case State.HIGHLIGHTED:
return Utilities.ResourceDictionary["HighlightThemeColour"] as Brush;
case State.PROCESSING:
return Utilities.ResourceDictionary["ProcessingWellColour"] as Brush;
default:
-                    return Brushes.Transparent.Color;
+                    return Brushes.Transparent;
}

最新更新