首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SolidColorBrush色彩绑定问题

SolidColorBrush色彩绑定问题
EN

Stack Overflow用户
提问于 2019-09-17 21:50:50
回答 2查看 1.6K关注 0票数 1

因此,我在ObjA类的“ObjA”属性中遇到了一些绑定问题。我还有一个CurrentState变量,它根据它的值返回一个刷(在下面的转换器中完成)。

代码语言:javascript
复制
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触发器中。

代码语言:javascript
复制
                <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')

我不知道为什么..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 08:32:36

当您简单地选择xaml中的颜色时,WPF将通过隐式转换器自动运行您的颜色,并将其包装在画笔中。由于您正在提供您自己的转换器,您将不再能够从隐式WPF转换器中受益,因此您将希望自己返回画笔。

这里是您的示例,其中添加了“新SolidColorBrush”到各个行,以满足背景绑定的要求。

代码语言:javascript
复制
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();
    }
}
票数 1
EN

Stack Overflow用户

发布于 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'),我认为您的代码不会发送这条消息,我需要更多的代码。

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

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

代码语言:javascript
复制
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,您可以看到以下代码。

代码语言:javascript
复制
            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;
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57982510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档