在wpf模板上绑定两种颜色

本文关键字:绑定 两种 颜色 wpf | 更新日期: 2023-09-27 18:08:31

我创建了一个模板来为我的应用程序设置一个主题。在这个模板中,我创建了一个渐变样式(由两种颜色组成):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <LinearGradientBrush x:Key="DegradeCouleurTheme" StartPoint="0,0" EndPoint="0,1">
       <!--<GradientStop Offset="0" Color="#00b6e7"/>
       <GradientStop Offset="1" Color="#0086d6"/>-->
       <GradientStop Offset="0" Color="{Binding Path=(m_ThemeColorGradientBegin)}"/>
       <GradientStop Offset="1" Color="{Binding Path=(m_ThemeColorGradientEnd)}"/>
   </LinearGradientBrush>
</ResourceDictionary>

我想能够改变这两种颜色,所以我已经创建了一个窗口,以设置颜色。这两种颜色存储在一个类"cparameters .cs"中,然后存储在数据库中。

这是我的CParameters类:(我清理类以获得更好的视图)

namespace Phoenix_CRM
{
    public class CParametres : INotifyPropertyChanged
    {
        private Color m_ThemeColorGradientBegin;
        public Color ThemeColorGradientBegin
        {
            get { return m_ThemeColorGradientBegin; }
            set
            {
                m_ThemeColorGradientBegin = value;
                FirePropertyChangedEvent("ThemeColorGradientBegin");
            }
        }
        private Color m_ThemeColorGradientEnd;
        public Color ThemeColorGradientEnd
        {
            get { return m_ThemeColorGradientEnd; }
            set
            {
                m_ThemeColorGradientEnd = value;
                FirePropertyChangedEvent("ThemeColorGradientEnd");
            }
        }

        public CParametres(r)
        {
           ......
        }
        public void LoadParams()
        {
            if (ReadParamFromDB() == true)
            {
                setThemeGradient(m_ThemeColorGradientBegin, m_ThemeColorGradientEnd);
            }
        }    
        public void setThemeGradient(Color ColorBegin, Color ColorEnd)
        {
            ThemeColorGradientBegin = ColorBegin;
            ThemeColorGradientEnd = ColorEnd;
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void FirePropertyChangedEvent(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

在我的App.xaml.cs中,我创建了一个对象" cparameters ",并在该对象中从数据库加载颜色:

在my App.xamls.cs
obj_Parametres = new CParametres()
obj_Parametres .LoadParams()

在LoadParams()之后,这两种颜色存储在:

m_ThemeColorGradientBegin和m_ThemeColorGradientEnd对象。

我正在尝试为这两种颜色绑定到我的模板,当我运行我的应用程序时,我没有任何崩溃,但颜色不适用。

我调试我的应用程序,并且LoadParams函数是OK的,我的m_ThemeColorGradientBegin和m_ThemeColorGradientEnd对象包含颜色。

谁能解释一下为什么我的绑定不正常?

谢谢你:)

最诚挚的问候,

Nixeus

—EDIT—After MoHaKa tips:

模板:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:ns="clr-namespace:Phoenix_CRM">

  <LinearGradientBrush x:Key="DegradeCouleurTheme" StartPoint="0,0" EndPoint="0,1">
      <!--<GradientStop Offset="0" Color="#00b6e7"/>
      <GradientStop Offset="1" Color="#0086d6"/>-->
      <GradientStop Offset="0" Color="{x:Static ns:CParametres.ThemeColorGradientBegin}"/>
      <GradientStop Offset="1" Color="{x:Static ns:CParametres.ThemeColorGradientBegin}"/>
  </LinearGradientBrush>
</ResourceDictionary>

My cparameters . cs:

    private static Color m_ThemeColorGradientBegin;
    public static Color ThemeColorGradientBegin
    {
        get { return m_ThemeColorGradientBegin; }
        set
        {
            m_ThemeColorGradientBegin = value;
            FirePropertyChangedEvent("ThemeColorGradientBegin");
        }
    }

设置静态到ThemeColorGradientBegin和m_ThemeColorGradientBegin我有一个编译器错误在FirePropertyChangedEvent():错误MC3011:无法找到静态成员ThemeColorGradientBegin上的cparameters类型。

你有什么主意吗?

谢谢:)

在wpf模板上绑定两种颜色

以下代码将为您提供帮助:

在你的窗口标签中定义这个语句。

xmlns:ns="clr-namespace:Phoenix_CRM"

现在使用绑定获取颜色:

<LinearGradientBrush x:Key="DegradeCouleurTheme" StartPoint="0,0" EndPoint="0,1">
    <!--<GradientStop Offset="0" Color="#00b6e7"/>
    <GradientStop Offset="1" Color="#0086d6"/>-->
    <GradientStop Offset="0" Color="{x:Static ns:CParametres.ThemeColorGradientBegin}"/>
    <GradientStop Offset="1" Color="{x:Static ns:CParametres.ThemeColorGradientEnd}"/>
</LinearGradientBrush>

别忘了把你的颜色属性改成static