在UserControl中设置ForegroundColor

时间:2012-10-23 07:49:49

标签: c# wpf user-controls wpf-controls foreground

我在WPF中编写用户控件,这是我自己的第一个控件。 对于您的信息,我使用的是Telerik控件。

我的用户控件只有一个Grid,其中只包含2 GridView个。 现在我想通过设置前景和背景来为某人设置GridView样式的可能性。

我都是这样设定的:

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 );
  }
}

问题是我的前景,背景值在运行时被忽略。 要为Foreground设置修正值,会产生预期结果。

我没有发现我的错误,有人有想法吗?

1 个答案:

答案 0 :(得分:5)

所以要澄清......你的UserControl内部有GridGridViewsDataContext = this;

要引用UserControl上的依赖项属性......可以用不同的方式完成。

将DataContext设置为Self(代码隐藏)

在UserControl的构造函数中,将DataContext设置为指向UserControl实例。

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

然后像这样访问你的属性:

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

将DataContext设置为Self(XAML)

如果您不想通过代码隐藏来执行此操作,则可以使用XAML。

x:Name="MyUserControl"

使用UserControl和ElementName上的名称来引用它

UserControl放在ElementName上,然后使用Background="{Binding ElementName=MyUserControl, Path=DarkBackground}" Foreground="{Binding ElementName=MyUserControl, Path=LightForeground}" 引用它。

Background="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DarkBackground}"
Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=LightForeground}"

使用RelativeSource告诉Binding属性的来源。

使用RelativeSource在树中搜索UserControl来指定​​Binding的“source”。

{{1}}