使用视图和数据库从Windows 8.1 / Windows Phone 8.1应用程序创build一个dll

我正在创build一个Windows Phone 8.1应用程序,该应用程序应该充当其他Windows Phone 8.1应用程序的库。 在我的新应用程序中,我可以将库项目添加到解决scheme,因此它作为一种外部库的function,这就是我想要的。
但是,我想知道是否有某种方式导出我的WP库应用程序,例如,我可以添加为我的新应用程序的引用的.dll。 有没有其他办法可以做到这一点?

值得一提的是,我的图书馆应用程序将具有视图,甚至数据库,而不仅仅是处理来自主应用程序的数据的方法。

由于它是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文件夹的全部内容复制到刚刚创建的目录(主要是主题文件夹)。

再次运行你的程序,你的问题将得到解决。 但不幸的是,每次编译该dll项目时都必须这样做 。 这就是为什么我说只是添加库项目作为解决方案的一部分,直到你准备好将它打包成NuGet。 希望有所帮助。


一个简单的库(教程)

假设我想创建一个可移植的库来调用ChubCharts ,我创建了一个Project,它使用一个默认的可移植库加载了一个文件调用Class1.cs

我做的第一件事是删除该文件:)

然后我添加一个模板控制从添加 – >添加新项目 – >模板控制

我将它命名为ChobosaurusCharts,它应该看起来像这样一旦生成。

 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> :(我不想这样做,因为这是一个Charting Library,我想添加一些东西到Visual Tree中,主要是一个<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