如何在UWP中创建通用的xaml用户控件?

时间:2017-08-16 12:53:51

标签: c# xaml uwp user-controls

我收到一个奇怪的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'已在其他部分中指定

我意识到我在尝试从我自己的用户控件扩展时做了一些有点奇怪的事情,但我认为在这种情况下它是有意义的,至少有一些用户建议它{{3} }。

有人能指出我可能做错了吗?

1 个答案:

答案 0 :(得分:2)

我刚刚意识到你正在使用

x:TypeArguments="system:DateTime, system:Double"
在你的XAML中

。不幸的是,UWP不支持此功能。另请注意,XAML中的Double应定义为x:Double而不是system:Double。但无论如何,这与此案无关。

我在项目中使用此功能的唯一方法是创建一个UserControl(带有XAML文件)作为任何内容的 base ,然后创建一个泛型类一旦泛型类到位,我就会根据它创建一堆具有不同类型的派生类。例如,在你的情况下,你会有

基地UserControlAxisBase

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