Sch*_*Box 3 c# windows dll visual-studio windows-phone-8.1
我正在创建一个Windows Phone 8.1应用程序,它应该充当其他Windows Phone 8.1应用程序的库.在我的新应用程序中,我可以将库项目添加到解决方案中,因此它可以作为一种外部库运行,这就是我想要它做的事情.
但是,我想知道是否有某种方法可以将我的WP Library应用程序导出到,例如,我可以添加的.dll作为我的新应用程序的参考.还有其他方法我可以做到这一点吗?
值得一提的是,我的Library App将拥有视图甚至数据库,而不仅仅是处理来自主应用程序的数据的方法.
因为它是Windows 8.1/Windows Phone 8.1.您可以查看商店应用程序 - >通用应用程序 - >类库(便携式通用应用程序).

将其编译为dll后,只需将对所述dll的引用添加到参考文件夹即可.
要在C#中使用库,只需键入用于创建库的命名空间.
using your_namespace_from_library;
Run Code Online (Sandbox Code Playgroud)
要使用您的视图以及不是来自XAML的视图,只需在XAML文件中键入您的命名空间
<Page xmlns:YOUR_AWESOME_TAG="using:your_namespace_from_library">
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过执行以下操作来使用库中的标记:
<YOUR_AWESOME_TAG:Your_View>
Run Code Online (Sandbox Code Playgroud)
:)
要解决Payload问题,请查看错误消息,它应该类似于:

仔细看看.它试图引用一个不存在的目录来获取正确的文件.解决方案(我唯一知道的)就是去那个目录并制作它.就我而言,它是"C:\ Users\Duan\Documents\Visual Studio 2013\Projects\Chubosaurus.Charts_Old2\Chubosaurus.Charts\bin\Debug\Chubosaurus.Charts"
出于某种原因,它决定在Debug文件夹中创建一个额外的目录,其中dll是编译到的.因此,创建该文件夹,它是库的名称.这是你不喜欢的部分.将Debug文件夹的整个内容复制到刚刚创建的目录中(主要是Theme文件夹).
再次运行您的程序,您的问题将得到解决. 但不幸的是,每次编译该dll项目时都必须这样做.这就是为什么我说只需将库项目添加为解决方案的一部分,直到您准备将其打包到NuGet中.希望有所帮助.
一个简单的图书馆(教程)
假设我想创建一个可移植的库来绘制ChubCharts图表,我创建了Project,它使用一个带文件调用Class1.cs的默认可移植库加载我
我做的第一件事是删除该文件:)
然后我从添加 - >添加新项 - >模板控件添加模板控件
我将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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有了最简单的控制.让我们应用一个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>
Run Code Online (Sandbox Code Playgroud)
默认情况下,它只是一个简单的旧<Border>:(,我不想这样.因为这是一个图表库.我想在Visual Tree中添加一些东西,主要是a <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>
Run Code Online (Sandbox Code Playgroud)
到目前为止,您应该猜测您可以根据需要添加任意数量的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在可以使用了:D
将可移植库添加到命名空间中添加的解决方案中.编译.
省略疯狂的小学代数和我的RenderFunction(只是在画布上添加线条)
将我们的自定义控件添加到MainPage.xaml,您也可以立即从工具箱中拖动控件:D
<chubo:ChubosaurusCharts x:Name="my_chart">
Run Code Online (Sandbox Code Playgroud)
你辛勤工作的结果是:

干杯:D