在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.csobj_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类型。
你有什么主意吗?
谢谢:)
以下代码将为您提供帮助:
在你的窗口标签中定义这个语句。
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