我在库项目中创建了一个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不能。
任何帮助都将不胜感激。
答案 0 :(得分:0)
长话短说 - 你不能通过xaml的另一个控件继承xaml的控制(即使这样做也有意义吗?)。在您的情况下,EmbeddingUserControl不包含任何可视树元素(只是空网格),所以您可以这样做:
public class EmbeddingUserControl : UserControl {
// some methods, properties of your control
}
然后,您可以像在问题中一样继承(不要忘记从xaml文件和代码隐藏文件中的EmbeddingUserControl 继承)。
如果你的继承控件本身没有xaml,你也可以使用xaml继承用户控件(所以你可以添加\ override逻辑)。
如果你需要继承一些视觉结构 - 你必须从继承切换到组合。也就是说:您的基本控件提供了一些可以放置其他控件的占位符,甚至更好地允许提供模板来格式化数据项(例如ItemsControl和ItemTemplate属性)。然后,如果需要,您只需使用其他控件填充这些占位符。