C# WPF知識要點,工程項目中應用總結!

來源:互聯網
上載者:User

(1)立刻關閉整個應用程式,不會等待當前進程結束,相當於工作管理員裡直接關閉進程

System.Environment.Exit(0);

(2)WPF開啟瀏覽器並跳轉要固定URL

Process proc = new System.Diagnostics.Process();  proc.StartInfo.FileName = "http://www.baidu.com";  proc.Start();


(3)winform Session 保持網站登入狀態


           // JObject javascript = null;            //username=test&password=fantao            string postData = "username=" +DataUserInfo.name + "&password=" + DataUserInfo.password;//POST參數和值寫入POSTDATE裡            byte[] byteArray = Encoding.Default.GetBytes(postData);            string url = "http://baidut.com/getservers?"; //POST到網站            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));            webRequest.Method = "POST";            webRequest.ContentType = "application/x-www-form-urlencoded";            webRequest.ContentLength = byteArray.Length;            webRequest.CookieContainer = DataUserInfo.myCookie;            //   CookieContainer cookie = webRequest.CookieContainer;//如果用不到Cookie,刪去即可              Stream newStream = webRequest.GetRequestStream();            newStream.Write(byteArray, 0, byteArray.Length);            newStream.Close();            //接收返回資訊:            HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();            // WebHeaderCollection myWebHeaderCollection =response.Headers;//擷取session            StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.Default);            // string sl = response.Headers.Get("Set-Cookie");            string Message = php.ReadToEnd();           // javascript = (JObject)JsonConvert.DeserializeObject(Message);           // if (javascript["status"].ToString() == "n")         //   {            //    string s = javascript["info"].ToString();//反回錯誤資訊         //   }


4.HashTable的取值和鍵的方法

 foreach (DictionaryEntry de in HtServerVSName)//HtServerVSName是HashTable            {                string sed = de.Key.ToString();                string seds = de.Value.ToString();                           }


5.操作DataSet中的DataTable

DataTable dt = new DataTable("MyDt");            DataSet ds = new DataSet("MyDs");            ds.Tables.Add(dt);//把表添加到庫裡,怎麼樣,簡單吧,呵呵            //ds.Tables["MyDt"].Rows[2]["name"] = "語文";//給table中的某個欄位的某個記錄賦值            //ds.Tables["MyDt"]就找到表了if (ds.Tables.Contains("MyDt")){     foreach (DataRow tempRow in ds.Tables["MyDt"].Rows)                {                    if ("ip" == tempRow["Server"].ToString())                    {                       //遍曆取資料                    }                                           }}

6.用記憶體共用 進行處理序間通訊,方便快捷。

可實現單 一程式啟動,並且開啟已啟動的程式和托盤操作


7. wpf帶選擇按鈕的messagebox

 ButtonBase button = this.Template.FindName("PART_CloseButton", this) as ButtonBase;            if (button != null)            {                button.Click += delegate//匿名委託                {                   MessageBoxResult dr = MessageBox.Show("您正在刪除該伺服器條目。\n\n確定要刪除該伺服器條目嗎。", "提示", MessageBoxButton.OKCancel);                   if (dr == MessageBoxResult.OK)                   {                       // get the parent tabcontrol                        TabControl tc = Helper.FindParentControl<TabControl>(this);                       if (tc == null) return;                       // remove this tabitem from the parent tabcontrol                       tc.RemoveTabItem(this);                   }                };            }

8.事務委託

  WPF 應用程式啟動時具有兩個線程:一個用於處理呈現,另一個用於管理 UI。 呈現線程實際上隱藏在後台運行,而 UI 線程則接收輸入、處理事件、繪製螢幕以及運行應用程式代碼。UI 線程在一個名為Dispatcher 的對象中將工作項目進行排隊。Dispatcher 根據優先順序選擇工作項目,並運行每一個工作項目直到完成。Dispatcher 類提供兩種註冊工作項目的方法:Invoke 和 BeginInvoke。 這兩個方法都會安排執行一個委託。Invoke 是同步調用,即它直到 UI 線程實際執行完該委託時才返回。BeginInvoke 是非同步呼叫,因而將立即返回。

Thread thread = new Thread(new ThreadStart(() =>                             {                                 // Thread.Sleep(5000);                                 Dispatcher.Invoke(new Action(() =>                                 {                           //方法體fun();                                 }), null);                             }));thread.start(); Thread t = new Thread(new ThreadStart( delegate            {                tb_test.Dispatcher.BeginInvoke(new Action(delegate                   {                        tb_test.Text = "123";                    }), null);            }));            t.Start();

9.wpf後台改變textbox或label或textblock的字型顏色

textbox.Foreground = new SolidColorBrush(Colors.AliceBlue);  //用固態畫刷填充前景色彩

10.Listview清空問題。

如果ListView資料來源來自:listview.ItemsSource=list;

只要清空List,就能清空listview; 

如果用listview.clear();那麼多次點擊清空按鈕就會出現:當 ItemsSource 正在使用時操作無效。改用 ItemsControl.ItemsSource 訪問和修改元素。這個異常。

11.wpf動畫完成後勢行某一事件的,Lamda表達示;

            Storyboard sb = this.Resources["storyboard"] as Storyboard;            sb.Completed += (s, a) =>          {              //要做的工作          };            sb.Begin();

12.wpf嵌入Winform控制項

xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 

13.WPF中其它自訂類中訪問主視窗中的控制項解決辦法

比如,在類中要尋找一個StackPanel,用如下方法。

 StackPanel spi = Application.Current.MainWindow.FindName("ItemStak") as StackPanel;


14. (Dictionary.Add(key,"123") 和 Dictionary[key]="123")

如果Dictionary中已經有了key, 則再Add會報錯: Dictionary 中已存在具有相同鍵的元素。
而 Dictionary[key]則不會報錯,沒有時添加,有時則修改替換,因此,更加推薦使用這個方法,更安全,不必寫個if判斷。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.