Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SolidColorBrush颜色绑定问题_C#_Wpf_Xaml - Fatal编程技术网

C# SolidColorBrush颜色绑定问题

C# SolidColorBrush颜色绑定问题,c#,wpf,xaml,C#,Wpf,Xaml,因此,我的ObjA类上的“groupcolor”属性存在一些绑定问题。我还有一个CurrentState变量,它根据其值返回一个笔刷(这在下面的转换器中完成) 它用于我在视图XAML中创建的按钮的ControlTemplate触发器中 <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true">

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

它用于我在视图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:找不到治理框架元素 或目标元素的FrameworkContentElement。 BindingExpression:Path=groupcolor;DataItem=null;目标元素是 “SolidColorBrush”(HashCode=46663997);目标属性为“颜色” (键入“颜色”)


我不知道为什么…

对不起,我的答案无法解决您的问题
System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:Path=groupcolor;DataItem=null;目标元素是“SolidColorBrush”(HashCode=46663997);目标属性为“Color”(键入“Color”)
我认为您的代码不会发送此消息,我需要更多代码

但是您的转换器在此代码中返回
颜色
返回笔刷.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')
如何修复它?尝试替换
将笔刷.Transparent.Color
返回到
笔刷.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;
            }


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

这是您的示例,其中仅在各行中添加了“new 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();
    }
}

您可以改为使用MultiTriggers,在这里您可以在XAML中声明控件的当前状态和选中状态的各种组合。您应该返回
SolidColorBrush
,而不是
Brush
。谢谢大家:)我将尝试一下
CurrentState
属性定义在哪里
按钮的
DataContext
?在mm8成功修复了它,我不得不移除我的转换器并使用我的
groupcolor
属性,它是一个
solidcolorbush
。。。。不过有点烦人,因为转换器返回一个
SolidColorBrush
…谢谢lindexi。为什么人们投票反对?如果有人能告诉我一个问题应该怎么问,我会很感激的,因为我使用的是提出问题的指导原则。。。Wth@uaswpf我不知道为什么。但我想我忘了点击向上投票,我会点击向上投票。
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();
    }
}