我在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设置修正值,会产生预期结果。
我没有发现我的错误,有人有想法吗?
答案 0 :(得分:5)
所以要澄清......你的UserControl
内部有Grid
,GridViews
有DataContext = this;
。
要引用UserControl上的依赖项属性......可以用不同的方式完成。
在UserControl的构造函数中,将DataContext设置为指向UserControl实例。
Background="{Binding DarkBackground}"
Foreground="{Binding LightForeground}"
然后像这样访问你的属性:
<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">
如果您不想通过代码隐藏来执行此操作,则可以使用XAML。
x:Name="MyUserControl"
将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在树中搜索UserControl来指定Binding的“source”。
{{1}}