我正在创建一个Windows Phone 8.1应用程序,该应用程序应充当其他Windows Phone 8.1应用程序的库。在我的新应用中,我可以将Library项目添加到解决方案中,因此它可以作为一种外部Library起作用,这可以完成我想做的事情。
但是,我想知道是否可以将WP Library应用程序导出到例如可以添加为对新应用程序的引用的.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>
:)
要解决有效载荷问题,请检查错误消息,它应该类似于以下内容:
仔细看。它试图引用一个不存在的目录来获取正确的文件。解决方案(我所知道的唯一)是转到该目录并进行创建。就我而言,它是“ C:\ Users \ Duan \ Documents \ Visual Studio 2013 \ Projects \ Chubosaurus.Charts_Old2 \ Chubosaurus.Charts \ bin \ Debug \ Chubosaurus.Charts”
由于某种原因,它决定在dll编译到的Debug文件夹中创建一个额外的目录。因此,创建该文件夹即库的名称。这是您不喜欢的部分。将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);
}
}
现在,我拥有最简单的控件。让我们对其应用一个ContentTemplate,这样我就可以制作一个Composite控件,这样它实际上就可以做一些事情了:)
Visual Studios在解决方案内部创建一个名为Themes的文件夹。在该文件夹内是一个名为“ 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中添加一些内容,主要是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>
到现在为止,您应该猜测可以根据需要添加任意数量的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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句