WPF用户控制设计时访问内部用户控件

时间:2014-07-10 13:09:25

标签: c# wpf xaml user-controls dependency-properties

我有一个用户控件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也是如此,我发现自己在圈子里走来走去。

有人可以帮忙吗?

由于

1 个答案:

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