在我的WPF应用程序中,我希望有一些XAML用户控件,它从具有泛型类参数的基类扩展而来:
XAML:
<base:ModuleView
x:Class="View.ControllerTestView"
x:TypeArguments="local:ControllerTestModule"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:base="clr-namespace:View"
xmlns:local="clr-namespace:Implementations.Controller.Module">
代码behinde和基类
namespace View
{
/// <summary>
/// View Component of the ControllerTestModule
/// </summary>
public partial class ControllerTestView: ModuleView<ControllerTestModule>{ //... }
public abstract class ModuleView<C> : UserControl, IView<C> where C : AbstractController { //.. }
public class ControllerTestModule : AbstractController{ //... }
}
没有类参数它可以工作,但是使用类参数并添加x:TypeArgument
标记我得到Visual Studio显示的以下错误消息:
The name "ModuleView`1" does not exist in the namespace "clr-namespace:View".
x:TypeArguments="ControllerTestModule" is not valid. 'ControllerTestModule' is not a valid type name reference for the generic argument at position '1'. Line 2 Position 18.
The name "ControllerTestModule" does not exist in the namespace "clr-namespace:Implementations.Controller.Module". ControllerTestView.xaml
答案 0 :(得分:2)
基本答案:不要在xaml中这样做。
在您的控件的代码后面执行:
public class TestModuleViewBase : ModuleView<ControllerTestModule>{}
public class TestModuleView : TestModuleViewBase
{
}
和xaml:
<TestModuleViewBase
x:Class="TestModuleView " <- and some namespaces
这样你就不必与xaml作斗争并且可以使用完整的设计师经验。唯一的缺点是你需要公共基类。