簡體   English   中英

WPF用戶控件設計時間訪問內部用戶控件

[英]WPF User Control design time accessing internal user control

我有一個用戶控件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 ,用戶控件為null,因此“對象引用未設置為實例....”。

這在運行時有效,但我需要它在設計時也有效。

正如您可能已經意識到的那樣,我對DP以及WPF總體上並不了解太多,而且我發現自己正在轉圈。

誰能幫忙嗎?

謝謝

我已經做了一個簡單的示例,說明了如何將孩子的財產綁定到父母的財產。 我以Color屬性為例,但是對於每種屬性類型都是相同的。

有兩個用戶控件:帶DP'Colour'的ControlB和帶DP DeviceColour ControlA ControlB只是將其背景繪制為指定的顏色:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM