2014-07-10 114 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>