首页新闻找找看学习计划

wp7怎样调用dll,请各位大哥大姐帮忙,谢谢

0
悬赏园豆:200 [已解决问题] 解决于 2011-07-11 21:41

wp7怎样调用dll,在wp7中有一个是编写dll的

问题补充:

我现在主要是开发一个动态库给第三方使用,这个动态库还需要有界面,请问有什么方式实现

阿拉丁神灯的主页 阿拉丁神灯 | 初学一级 | 园豆:0
提问于:2011-06-26 07:20
< >
分享
最佳答案
0

不太明白你的问题是什么。如果你想创建给WP7使用的DLL,你可以用Visual Studio创建Windows Phone Class Library,它编译出来的就是一个DLL。你可以在这个类库项目里添加页面,也可以在里面创建用户控件。如果你需要把这个项目编译出来的DLL给别的WP7项目使用,你可以直接给他们,让他们添加这个DLL的引用,或者直接添加你的项目,都可以的。

收获园豆:200
Allen Lee | 小虾三级 |园豆:704 | 2011-06-28 12:58
就是你说的这个意思,现在主要是创建用户控件时,用户控件不止一个界面,请问怎样进行这个操作啊
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-06-29 07:48
你可以在Class Library项目里添加不止一个页面。
Allen Lee | 园豆:704 (小虾三级) | 2011-06-29 08:05
@Allen Lee:请问怎样添加啊,我试了两种方法:1.我想添加PhoneApplicationPage,但是实验无法成功,说无法找到PhoneApplicationPage,2.然后我有试了usercontrol,进行动态的加载控件,但是动态的加载控件响应事件就不知道怎么实现了。可以给我点源代码参考一下吗?我主要想用PhoneApplicationPage,如果不行就用PhoneApplicationPage。 我的mail:sunweiss@qq.com,qq:24070834.期待你的回音
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-01 15:30
在Phone Class Library项目里通过Add->New Item添加两个新的页面不行吗?我刚刚试了一下,添加了一个Phone Page和Pivot Page。你说的找不到是啥意思?
Allen Lee | 园豆:704 (小虾三级) | 2011-07-02 08:22
1.“找不到”是无法Navigate到那个页面,我的代码是: NavigationService.Navigate(new Uri("/插件dll;component/view/TransactionConfirmationPanel.xaml", UriKind.Relative));2.第三方怎么调用这个页面,在dll中这个界面的接口怎么实现
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-03 12:32
我是这样做的:
1.创建一个Phone Class Library项目
2.在PCL项目里创建一个页面,叫Page1
3.创建一个Windows Phone Application项目
4.在WPA项目里引用PCL项目
5.在WPA项目的主页上添加一个Button控件
6.在Button控件的Click事件处理程序里写
NavigationService.Navigate(new Uri("/PhoneClassLibrary1;component/Page1.xaml", UriKind.Relative));
7.运行WPA项目,单击主页上的Button,可以打开PCL里面的Page1页。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-03 13:40
补充一下,第4步的添加引用是通过Add Reference来添加。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-03 13:42
1.我先创建wpa,然后再创建pcl就会出现navigate不到页面,不知道是什么原因
2.如果我想指创建一个applicationbar,然后通过引用这个资源在各个页面,请问这个在dll中怎么操作,在dll中有app这个静态的类吗
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-04 11:38
我重新创建了一次,这次是先创建WPA,再创建PCL,并在WPA的主页上添加一个AppBar,在这个AppBar按钮上的Click事件处理程序里通过之前的Navigate方法打开PCL的Page1。没问题。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-05 08:34
关于你提到的想通过AppBar提供这些页面,也是可以的。

假设我们已经有了上面这些,我们可以在PCL里面创建一个AppBarFactory静态类:

public static class AppBarFactory
{
public static IApplicationBar CreateAppBar(NavigationService nav)
{
IApplicationBar appBar = new ApplicationBar();
appBar.IsVisible = true;
appBar.IsMenuEnabled = true;

ApplicationBarIconButton button1 = new ApplicationBarIconButton(new Uri("/Images/button1.png", UriKind.Relative));
button1.Text = "open page 1";
button1.Click += (o, e) => nav.Navigate(new Uri("/PhoneClassLibrary1;component/Page1.xaml", UriKind.Relative));

appBar.Buttons.Add(button1);

return appBar;
}
}

NavigationService的实例是在主页的Loaded事件处理程序注入的:

public MainPage()
{
InitializeComponent();

Loaded += (o, e) =>
ApplicationBar = AppBarFactory.CreateAppBar(NavigationService);

}

当然,如果你在真实项目里使用,那么你需要在Loaded事件处理程序里判断一下AppBar是否已经创建,以免重复重建。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-05 08:49
谢谢,但是我需要带参数Navigate到dll那个页面时候,无法获取到到参数的值,我的代码是: if (NavigationContext.QueryString.Count > 0) //如带参数,则处理
{
string s = NavigationContext.QueryString["city"];
}
请问是什么原因啊
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-06 14:47
补充一下,我想在界面初始化时获取此参数值,请问怎么操作啊
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-06 14:59
可以修改一下CreateAppBar方法,使它允许参数注入:

public static IApplicationBar CreateAppBar(NavigationService nav, Dictionary args)
{
IApplicationBar appBar = new ApplicationBar();
appBar.IsVisible = true;
appBar.IsMenuEnabled = true;

ApplicationBarIconButton button1 = new ApplicationBarIconButton(new Uri("/Images/button1.png", UriKind.Relative));
button1.Text = "open page 1";
button1.Click += (o, e) => nav.Navigate(new Uri("/PhoneClassLibrary1;component/Page1.xaml?city=" + args["city"], UriKind.Relative));

appBar.Buttons.Add(button1);

return appBar;
}
}


这样,你就可以在Page1里获取这个参数了,你可以重写OnNavigatedTo方法,然后在里面访问NavigationContext.QueryString["city"]
Allen Lee | 园豆:704 (小虾三级) | 2011-07-06 17:26
我重新写了loaded事件也是可以的,但是city=" + args["city"],这种写法好像有点问题。不知道是什么意思。
顺便问一下,在wp7中怎样实现下拉框
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-08 07:26
"/PhoneClassLibrary1;component/Page1.xaml?city=" + args["city"]

整句话就是一个字符串拼接,args是一个Dictionary,因此args["city"]返回一个字符串。

WP7的下拉框不采用传统的ComboBox,而是使用Silverlight for Windows Phone Toolkit的ListPicker控件。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-08 08:36
谢谢大哥,帮了我大忙。如果我想退出创建的dll界面,回到调用我dll的界面,请问怎么操作啊
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-08 17:30
后退啊..

WPA的P1打开PCL的P2,现在想回到P1,最简单的方法就是按Back键,这也是WP用户体验标准的要求,我们不需要特别做点什么。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-08 17:37
我是pcl的p2打开了pcl的p3,现在想直接从p3回到wpa的p1
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-09 09:25
请参见我在http://home.cnblogs.com/q/26519/的回复。
Allen Lee | 园豆:704 (小虾三级) | 2011-07-09 11:03
谢谢,我在写通信时,利用的HttpWebRequest,封装在一个类中,页面调用这个类,通知页面是Dispatcher.BeginInvoke(() => { ; });每次都是发送成功时出发这个事件,我想在接受到数据是也触发这个事件。请问怎么控制Dispatcher
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-09 17:28
我的代码是:
public void DoHttpPost(string sendmessage, string application)
{
m_xmlbody = "\r\n\r\n";

m_xmlbody=m_xmlbody+ sendmessage;

m_xmlbody=m_xmlbody+ "
";

request.Method = "POST";
request.ContentType = "text/xml";
request.BeginGetRequestStream(new AsyncCallback(RequestCallback), request);
}
private void ResponseCallback(IAsyncResult result)
{

HttpWebRequest request = (HttpWebRequest)result.AsyncState;//获取异步操作返回的的信息
try
{
WebResponse response = request.EndGetResponse(result);//结束对 Internet 资源的异步请求
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
contents = reader.ReadToEnd();
//Dispatcher.BeginInvoke(() => { MessageBox.Show("show"); });

//通过呼叫UI Thread来改变页面的显示
}

}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}


}
private void RequestCallback(IAsyncResult asyncResult)
{
UTF8Encoding encoding = new UTF8Encoding();


Stream _body = request.EndGetRequestStream(asyncResult);

byte[] formBytes = encoding.GetBytes(m_xmlbody);//这是通过post方式传的

_body.Write(formBytes, 0, form
阿拉丁神灯 | 园豆:0 (初学一级) | 2011-07-10 13:06
其他回答(1)
0

C++还是.NET写的.

【秦时明月】 | 园豆:803 (小虾三级) | 2011-06-26 08:38
我现在主要是开发一个动态库给第三方使用,这个动态库还需要有界面,请问有什么方式实现,可以做成第三方控件的形式吗
支持(0) 反对(0) 阿拉丁神灯 | 园豆:0 (初学一级) | 2011-06-26 08:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册