因为它是 Windows 8.1 / Windows Phone 8.1。你可以看看 Store Apps -> Universal Apps -> Class Library (Portable for Universal Apps)。
编译成dll后,只需将对该dll的引用添加到引用文件夹即可。
要在 C# 中使用您的库,只需输入您用于创建库的命名空间。
using your_namespace_from_library;
要使用您的视图以及不使用 XAML 的内容,只需在 XAML 文件中输入您的命名空间
<Page xmlns:YOUR_AWESOME_TAG="using:your_namespace_from_library">
然后您可以通过执行以下操作来使用库中的标签:
<YOUR_AWESOME_TAG:Your_View>
:)
要解决有效负载问题,请查看错误消息,它应该类似于以下内容:
仔细看。它试图引用一个不存在的目录来获取正确的文件。解决方案(我知道的唯一一个)是转到该目录并制作它。就我而言,它是“C:\Users\Duan\Documents\Visual Studio 2013\Projects\Chubosaurus.Charts_Old2\Chubosaurus.Charts\bin\Debug\Chubosaurus.Charts”
出于某种原因,它决定在 DLL 编译到的 Debug 文件夹中创建一个额外的目录。因此,创建作为库名称的文件夹。这是你不喜欢的部分。将 Debug 文件夹的全部内容复制到刚刚创建的目录中(最重要的是 Theme 文件夹)。
再次运行您的程序,您的问题将得到解决。 但不幸的是,每次编译该 dll 项目时都必须这样做。这就是为什么我说只需将库项目添加为解决方案的一部分,直到您准备好将其打包到 NuGet 中。希望对您有所帮助。
一个简单的库(教程)
假设我想制作一个用于图表调用的便携式库ChubCharts,我创建了项目,它为我加载了一个带有文件调用 Class1.cs 的默认便携式库
我要做的第一件事就是删除那个文件:)
然后我从 Add -> Add New Item -> Templated Control 中添加一个模板控件
我将其命名为 ChubosaurusCharts,它在生成后应该看起来像这样。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Documents;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
public sealed class ChubosaurusCharts : Control
{
public ChubosaurusCharts()
{
this.DefaultStyleKey = typeof(ChubosaurusCharts);
}
}
现在我拥有了有史以来最简单的控制。让我们应用一个 ContentTemplate 到它,这样我就可以把它变成一个复合控件,这样它就真的有事可做了:)
Visual Studios 在解决方案中创建一个文件夹调用 Themes。该文件夹内有一个名为“Generic.xaml”的文件,其中包含我们的模板。
现在我想编辑将放入自定义控件的内容
Generic.xaml
<Style TargetType="local:ChubosaurusCharts">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ChubosaurusCharts">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
默认情况下,它只是一个普通的旧 <Border> :(,我不想要那个。因为这是一个图表库。我想在可视化树中添加一些东西,主要是 <Canvas>,所以让我们将其更改为:
<Style TargetType="local:ChubosaurusCharts">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ChubosaurusCharts">
<Canvas Background="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" DataContext="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}}">
<ContentPresenter Content="{Binding Surface}"></ContentPresenter>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
到现在为止,您应该猜想您可以根据需要添加任意数量的 XAML 标记,以便正确显示您的控件。我只想要一个<Canvas>。
现在通过一点 DataBinding Magic,我将 Canvas 绑定到我的控件的画布上以便于访问 :)
public sealed class ChubosaurusCharts : Control
{
public ChubosaurusCharts()
{
this.DefaultStyleKey = typeof(ChubosaurusCharts);
this.Surface = new Canvas();
}
private Canvas surface;
public Canvas Surface
{
get
{
return surface;
}
set
{
surface = value;
}
}
}
现在可以使用了:D
将便携式库添加到您在命名空间中添加的解决方案中。编译。
省略疯狂的小学代数和我的 RenderFunction(它只是在画布上添加线条)
将我们的自定义控件添加到 MainPage.xaml,您现在也可以从工具箱中拖动控件:D
<chubo:ChubosaurusCharts x:Name="my_chart">
而你努力的结果是:
干杯:D