wpf开发遇到的一些问题

时间:2021-12-13 19:38:16

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显示。