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

时间:2014-09-04 13:53:55

标签: c# windows visual-studio dll windows-phone-8.1

我正在创建一个Windows Phone 8.1应用程序,它应该充当其他Windows Phone 8.1应用程序的库。在我的新应用程序中,我可以将库项目添加到解决方案中,因此它可以作为一种外部库运行,这就是我想要它做的事情。
但是,我想知道是否有某种方法可以将我的WP Library应用程序导出到,例如,我可以添加的.dll作为我的新应用程序的参考。还有其他办法可以做到这一点吗?

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

1 个答案:

答案 0 :(得分:6)

因为它是Windows 8.1 / Windows Phone 8.1。您可以查看商店应用 - >通用应用 - >类库(适用于通用应用程序的便携式)。


enter image description here

将其编译为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问题,请查看错误消息,它应该类似于:

enter image description here

仔细看看。它试图引用一个不存在的目录来获取正确的文件。解决方案(我唯一知道的)是转到该目录并进行制作。就我而言,它是“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”的文件,其中包含我们的模板。

enter image description here

现在我想编辑我将放入自定义控件的内容

<强> 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;
        }
    }
}

你辛勤工作的结果是:

enter image description here

干杯:D