我正在创建一个Windows Phone 8.1应用程序,它应该充当其他Windows Phone 8.1应用程序的库。在我的新应用程序中,我可以将库项目添加到解决方案中,因此它可以作为一种外部库运行,这就是我想要它做的事情。
但是,我想知道是否有某种方法可以将我的WP Library应用程序导出到,例如,我可以添加的.dll作为我的新应用程序的参考。还有其他办法可以做到这一点吗?
值得一提的是,我的图书馆应用程序将拥有视图甚至数据库,而不仅仅是处理主应用程序数据的方法。
答案 0 :(得分:6)
因为它是Windows 8.1 / Windows Phone 8.1。您可以查看商店应用 - >通用应用 - >类库(适用于通用应用程序的便携式)。
将其编译为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>
:)
要解决Payload问题,请查看错误消息,它应该类似于:
仔细看看。它试图引用一个不存在的目录来获取正确的文件。解决方案(我唯一知道的)是转到该目录并进行制作。就我而言,它是“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添加模板控件 - &gt;添加新项目 - &gt;模板控制
我将其命名为 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在解决方案中调用文件夹主题。在该文件夹中是一个名为“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>
:(我不想这样。因为这是一个图表库。我想在Visual Tree中添加一些东西,主要是{{1} },所以我们将其改为:
<Canvas>
到目前为止,您应该猜测您可以根据需要添加任意数量的XAML标记,以便正确显示您的控件。我只想要一个<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>
。
现在有了一点DataBinding Magic,我将Canvas绑定到我的控件的画布上以便于访问:)
<Canvas>
现在可以使用了:D
将可移植库添加到命名空间中添加的解决方案中。编译。
省略疯狂的小学代数和我的RenderFunction(只是在画布上添加线条)
将我们的自定义控件添加到MainPage.xaml,您也可以立即从工具箱拖动控件:D
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