我有一个用户控件A,其中包含另一个用户控件B.
用户控件A具有依赖项属性DeviceColour
。这决定了内部用户控件B的颜色。
此Dependency属性的注册如下:
public static readonly DependencyProperty DeviceColourProperty = DependencyProperty.Register("DeviceColour",
typeof(vhBase.DeviceColours),typeof(ucBaseDevice),new FrameworkPropertyMetadata(vhBase.DeviceColours.Gray,
FrameworkPropertyMetadataOptions.AffectsRender,new PropertyChangedCallback(DeviceColourProperty_PropertyChanged)));
public vhBase.DeviceColours DeviceColour
{
get { return (vhBase.DeviceColours)GetValue(DeviceColourProperty); }
set { SetValue(DeviceColourProperty, value); }
}
private static void DeviceColourProperty_PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
ucBaseDevice device = (ucBaseDevice)obj;
device.VisualDevice.DeviceColour = (vhBase.DeviceColours)e.NewValue;
}
在上述属性更改事件中,VisualDevice
是指向内部用户控件B的属性,如下所示:
public override vhBase VisualDevice
{
get { return vhMain; }
}
vhMain
是用户控件B,我可以在XAML设计器中查看和操作。
我在设计时遇到的问题是,VisualDevice
似乎返回NULL即vhMain
,用户控件为空,因此"对象引用未设置为一个实例...."。
这在运行时有效,但我需要它也能在设计时工作。
正如你或许已经意识到的那样,我不太了解DP,而且一般来说,WPF也是如此,我发现自己在圈子里走来走去。
有人可以帮忙吗?
由于
答案 0 :(得分:0)
我已经制作了一个简单的样本,用于将儿童的财产绑定到父母的财产。 我使用Color属性作为示例,但对于每种属性类型都是相同的。
有两个用户控件:ControlB
,其中包含DP'颜色'和ControlA
的{{1}}。 DeviceColour
只是将其背景绘制为指定的颜色:
ControlB
还有如何在ControlA中绑定XAML中的属性:
<UserControl x:Class="WpfApplication1.ControlB" <!--skipped--> Name="controlB">
<Grid>
<Grid.Background>
<SolidColorBrush Color="{Binding ElementName=controlB, Path=Colour}" />
</Grid.Background>
</Grid>
</UserControl>
还有如何使用ControlA:
<UserControl x:Class="WpfApplication1.ControlA" <!--skipped--> Name="controlA">
<Grid>
<my:ControlB Colour="{Binding ElementName=controlA, Path=DeviceColour}" />
</Grid>
</UserControl>