1

アプリケーションのテーマを設定するためにテンプレートを作成しました。このテンプレートでは、グラデーション スタイル (2 色で構成) を作成しました。

<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>

2 つの色を変更できるようにしたいので、色を設定するためにウィンドウを作成しました。これらの色は、クラス "CParametres.cs" に格納されます。2 つの色は、次にデータベースに格納されます。

ここに私の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 で、オブジェクト「CParametres」を作成し、このオブジェクトのデータベースから色をロードします。

私の App.xamls.cs で

obj_Parametres = new CParametres()
obj_Parametres .LoadParams()

この LoadParams() の後、2 つの色が に格納されます。

m_ThemeColorGradientBegin および m_ThemeColorGradientEnd オブジェクト。

この 2 つの色をテンプレートにバインドしようとしていますが、アプリケーションを実行してもクラッシュはありませんが、色が適用されません。

アプリケーションをデバッグしましたが、LoadParams 関数は問題ありません。m_ThemeColorGradientBegin および m_ThemeColorGradientEnd オブジェクトには色が含まれています。

私のバインディングがうまくいかない理由を誰でも説明できますか?

どうもありがとう :)

よろしくお願いします、

ニクセウス

--編集-- MoHaKa のヒントの後:

テンプレート :

<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>

私の CParametres.CS :

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

ThemeColorGradientBegin および m_ThemeColorGradientBegin に static を設定すると、FirePropertyChangedEvent() でコンパイル エラーが発生します: エラー MC3011: CParametres タイプで静的メンバー ThemeColorGradientBegin が見つかりません。

アイデアはありますか?

ありがとう :)

4

1 に答える 1

2

このコードは次のことに役立ちます。

このステートメントをウィンドウ タグで定義します。

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

于 2013-04-11T10:59:00.257 に答える