[英]How to create a generic xaml user control in UWP?
我得到一个奇怪的XAML错误,我不明白,我希望有人可以提供帮助。 我正在尝试创建一个能够绘制任何类型数据的通用AxisBase
用户控件。 然后我想扩展它以创建一种特定的轴,一种可以在X轴上绘制日期并在Y轴上加倍的轴。
DateDoubleAxis.xaml
<axis:AxisBase x:Class="project.Views.Controls.Chart.Axis.DateDoubleAxis"
x:TypeArguments="system:DateTime, system:Double"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:axis="using:project.Views.Controls.Chart.Axis"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:system="using:System">...</axis:AxisBase>
AxisBase.cs
namespace project.Views.Controls.Chart.Axis
{
public class AxisBase<TX, TY> : UserControl {...}
}
DateDoubleAxis.xaml.cs
namespace project.Views.Controls.Chart.Axis
{
public sealed partial class DateDoubleAxis : AxisBase<DateTime, Double> {...}
}
但我得到了几个奇怪的错误。 在DateDoubleAxis
的xaml声明中,我收到错误
命名空间“AxisBase`2”在命名空间“using:project.Views.Controls.Chart.Axis”中不存在
我相信'2'来自于AxisBase
有两种与之相关的泛型类型。
然后在DateDoubleAxis
的声明中我得到错误:
'project.Views.Controls.Chart.Axis.DateDoubleAxis'的基类与其他部分的声明不同
随着讽刺的resharper警告
基本类型'AxisBase'已在其他部分中指定
我意识到我在尝试从我自己的用户控件扩展时做了一些有点奇怪的事情,但我认为在这种情况下它是有意义的,至少有一些用户在这里建议它。
谁能指出我可能做错了什么?
我才意识到你正在使用
x:TypeArguments="system:DateTime, system:Double"
在你的XAML中。 不幸的是,UWP不支持此功能。 还要记住,XAML中的Double
应定义为x:Double
而不是system:Double
。 但无论如何,这与此案无关。
我在我的项目中使用它的唯一方法是创建一个UserControl
(带有XAML文件)作为任何东西的基础 ,然后创建一个继承它的泛型类 。 一旦泛型类到位,我就会根据它使用不同的类型创建一堆派生类 。 例如,在你的情况下,你会有
Base UserControl
: AxisBase
<UserControl x:Class="xxx.AxisBase"
public partial class AxisBase : UserControl
{
public AxisBase()
{
InitializeComponent();
}
}
通用类: AxisOfT
public class AxisOfT<TX, TY> : AxisBase { }
派生类: DateDoubleAxis
public class DateDoubleAxis : AxisOfT<DateTime, double> { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.