2014-07-10 85 views
0

我有一个用户控制一个在其内含有另一用户控制B.WPF用户控制设计时访问内部用户控制

用户控制A具有一个依赖属性DeviceColour。这决定了内部用户的色彩控制B.

这种依赖性属性的登记如下:

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

我已经做了什么,我思,是右到孩子的属性绑定到父母的一种方式一个简单的示例。 我以Color属性为例,但对于每种类型都是一样的。

有两个用户控件:ControlB DP'颜色'和ControlA DP DeviceColourControlB只是画其背景设置为指定颜色:

<UserControl x:Class="WpfApplication1.ControlB" <!--skipped--> Name="controlB"> 
    <Grid> 
     <Grid.Background> 
      <SolidColorBrush Color="{Binding ElementName=controlB, Path=Colour}" /> 
     </Grid.Background> 
    </Grid> 
</UserControl> 

而且还有如何绑定在ControlA从XAML属性:

<UserControl x:Class="WpfApplication1.ControlA" <!--skipped--> Name="controlA"> 
    <Grid> 
     <my:ControlB Colour="{Binding ElementName=controlA, Path=DeviceColour}" /> 
    </Grid> 
</UserControl> 

而且还有如何使用ControlA:

<Window x:Class="WpfApplication1.MainWindow" <!--skipped-->> 
    <Grid> 
     <my:ControlA DeviceColour="Green" /> 
    </Grid> 
</Window>