4

私はWPFでユーザーコントロールを作成していますが、これは私の最初の独自のコントロールです。参考までに、私はTelerikコントロールを使用しています。

私のユーザーコントロールは、Grid2つだけを含むだけGridViewです。そして今、私は誰かにGridView前景と背景を設定することによってsをスタイリングする可能性を与えたいと思います。

私は両方ともこのように設定しました:

Background="{Binding ElementName=Grid, Path=DarkBackground}"
Foreground="{Binding ElementName=Grid, Path=LightForeground}"

私の背後にあるコードは次のとおりです。

public static DependencyProperty LightForegroundProperty = DependencyProperty.Register( "LightForeground", typeof( Brush ), typeof( ParameterGrid ) );
public Brush LightForeground
{
  get
  {
    return (Brush)GetValue( LightForegroundProperty );
  }
  set
  {
    SetValue( LightForegroundProperty, value );
  }
}

public Brush DarkBackground
{
  get
  {
    return (Brush)GetValue( DarkBackgroundProperty );
  }
  set
  {
    SetValue( DarkBackgroundProperty, value );
  }
}

問題は、実行中に前景と背景の値が無視されることです。修正値をフォアグラウンドに設定すると、期待どおりの結果が得られます。

私は自分の間違いを見つけられませんでした、誰かアイデアがありますか?

4

1 に答える 1

6

明確にするために...あなたは内側と2をUserControl持っています。GridGridViews

UserControlの依存関係プロパティを参照するには、さまざまな方法で実行できます。

DataContextをSelfに設定する(コードビハインド)

UserControlのコンストラクターで、UserControlインスタンスを指すようにDataContextを設定します。

DataContext = this;

次に、次のようにプロパティにアクセスします。

Background="{Binding DarkBackground}"
Foreground="{Binding LightForeground}"

DataContextをSelfに設定する(XAML)

コードビハインドを介して実行したくない場合は、XAMLを使用できます。

<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">

UserControlの名前とElementNameを使用して参照します

あなたのを着x:Name="MyUserControl"UserControl、それからそれをで参照してくださいElementName

Background="{Binding ElementName=MyUserControl, Path=DarkBackground}"
Foreground="{Binding ElementName=MyUserControl, Path=LightForeground}"

RelativeSourceを使用して、プロパティのソースをバインディングに通知します。

ツリー内のUserControlをハントするためにRelativeSourceを使用して、バインディングの「ソース」を指定します。

Background="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DarkBackground}"
Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=LightForeground}"
于 2012-10-23T09:45:15.950 に答える