4

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

我的用户控件只是一个Grid只包含 2 个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

所以澄清一下……你有一个UserControlwith a Gridinside 和 2 GridViews

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

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

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

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 告诉 Binding 属性的来源。

通过使用 RelativeSource 在树中寻找 UserControl 来指定绑定的“源”。

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