我在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设置修复值,会带来预期结果.
我没有发现我的错误,有谁有想法?
解决方法:
所以澄清一下……你有一个带内置网格和2个GridView的UserControl.
要引用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上的名称来引用它
在您的UserControl上输入x:Name =“MyUserControl”,然后使用ElementName引用它.
Background="{Binding ElementName=MyUserControl, Path=DarkBackground}"
Foreground="{Binding ElementName=MyUserControl, Path=LightForeground}"
使用RelativeSource告诉Binding属性的来源.
通过使用RelativeSource在树中搜索UserControl来指定Binding的“源”.
Background="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DarkBackground}"
Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=LightForeground}"