1.在无边框窗口里,webbrowser无法显示
当设属性WindowStyle="None"AllowsTransparency="True"Background="Transparent",webbrowser无法显示。
主要是因为webbrowser和普通的wpf控件绘制方式不一样。
下了codeplex上的Wpf Borderless Window 这个开源程序解决了这个问题。
下载地址http://wpfborderless.codeplex.com/
2.page和webbrowser里的html无法执行前进后退操作
由于我们的客户端需要page和html相互导航,而frame的navigate系统又不支持这个功能。
最后使用了两个stack,一个保存前进的uri记录,一个保存后退的uri记录,自己操作前进后退功能。
3.listbox的data binding
因为需要listbox绑定自己的数据显示,而且listItem结构复杂,最后采用的DataTemplate来解决这个问题。
对于控件里button的事件响应,采用了button的的附近属性tag来标识属于哪个item。
4.绑定的数据改变后,如何通知ui显示
对于要绑定的数据继承INotifyPropertyChanged类
其属性要写成
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public string Name
{
get
{
return this.m_name;
}
set
{
if (value != this.m_name)
{
m_name = value;
NotifyPropertyChanged("Name");
}
}
}
5 多线程
a可以通过ui控件的InvokeBegin函数把事件加到ui控件的 Dispatcher队列。
b.可以通过委托创建线程。
DownloadDelegate fetch = new DownloadDelegate(dowmloadTheFle);
fetch.BeginInvoke(null, null);
c.用DispatcherTimer类定时触发响应事件。比如下载时定时更新ui显示。