WPF用户控件继承问题

时间:2016-04-04 13:53:38

标签: c# wpf xaml

我在库项目中创建了一个WPF控件,并希望用新的扩展它。

<UserControl x:Class="Genesyslab.Desktop.Modules.ExtensionUtils85.GUI.EmbeddingUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>

    </Grid>
</UserControl>

我试图像这样扩展它:

<src:EmbeddingUserControl x:Class="Interaxalab.Desktop.Modules.PrototipoCable.CustomViews.InteractionView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="Genesyslab.Desktop.Modules.ExtensionUtils85.GUI"
    Name="InteractionWorksheetView" Height="321.613" Width="471.396"
>
    <Grid>

        <WindowsFormsHost x:Name="windowsFormsHost1" HorizontalAlignment="Left" Height="284" VerticalAlignment="Top" Width="471"/>

    </Grid>
</src:EmbeddingUserControl>

但是,我收到一条错误消息,指出名称“EmbeddingUserControl”在名称空间“Genesyslab.Desktop.Modules.ExtensionUtils85.GUI”中不存在。

这个名字显然确实存在,因为xaml.cs可以找到它,但由于某些原因,xaml不能。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

长话短说 - 你不能通过xaml的另一个控件继承xaml的控制(即使这样做也有意义吗?)。在您的情况下,EmbeddingUserControl不包含任何可视树元素(只是空网格),所以您可以这样做:

public class EmbeddingUserControl : UserControl {
    // some methods, properties of your control
}

然后,您可以像在问题中一样继承(不要忘记从xaml文件和代码隐藏文件中的EmbeddingUserControl 继承)。

如果你的继承控件本身没有xaml,你也可以使用xaml继承用户控件(所以你可以添加\ override逻辑)。

如果你需要继承一些视觉结构 - 你必须从继承切换到组合。也就是说:您的基本控件提供了一些可以放置其他控件的占位符,甚至更好地允许提供模板来格式化数据项(例如ItemsControl和ItemTemplate属性)。然后,如果需要,您只需使用其他控件填充这些占位符。