从带有视图和数据库的Windows 8.1/Windows Phone 8.1应用程序创建一个dll

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将拥有视图甚至数据库,而不仅仅是处理来自主应用程序的数据的方法.

Chu*_*are 6

因为它是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