因此,我在ObjA类的“ObjA”属性中遇到了一些绑定问题。我还有一个CurrentState变量,它根据它的值返回一个刷(在下面的转换器中完成)。
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();
}
}
}它用于我在视图XAML中创建的按钮的ControlTemplate触发器中。
<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:无法为目标元素找到控制FrameworkElement或FrameworkContentElement的方法。BindingExpression:Path=GroupColour;DataItem=null;目标元素是'SolidColorBrush‘(HashCode=46663997);目标属性是'Color’(键入'Color')
我不知道为什么..。
发布于 2019-09-19 08:32:36
当您简单地选择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();
}
}发布于 2019-09-18 00:47:00
对不起,我的答案不能解决您的问题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'),我认为您的代码不会发送这条消息,我需要更多的代码。
但是您的转换器在此代码中返回一个Color,return 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;
}https://stackoverflow.com/questions/57982510
复制相似问题