Application=Code+Markup 讀書筆記 5-7
第5章 StackPanel和WrapPanel
WPF設計了皮膚panel,將空間和其它元素放在皮膚上,稱之為Layout佈局。
類的邏輯樹:
Panel(抽象類)
Canvas
DockPanel
Grid
StackPanel
UniformGrid
WrapPanel
1)檢索元素的方法:
FrameworkElement的FindName方法,檢索這個根節點下的所有元素:
Button btn = FindName("ButtonName") as Button;
使用皮膚的Children索引:
grid.Children[5]; //返回UIElement型別
grid.Children.IndexOf(btn); //返回btn元素所在的索引值,不存在則為-1
通過事件處理器,獲取產生事件的物件,有兩種方法:
Button btn = sender as Button; //使用第一個引數
Button btn = e.Source as Button; //使用第二個引數
以上程式碼對應於:
btn.Click += ButtonClick;
以及
void ButtonClick(Object sender, RoutedEventArgs e) { }
事件處理器的另一種情形,就是不使用的btn.Click += ButtonClick方式為每一個Button新增事件,而是代替使用:
AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonClick));
此時,sender就是Window物件,這就意味著Window會監視其所有的子元素的Click事件;而e.Source仍然是被點選的按鈕物件。
當然,也可以讓所有Button的承載器StackPanel來進行監視:
stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonClick));
此時,sender就是StackPanel物件。
2)使用WrapPanel時,一般搭配ScrollViewer:
Content = scroll;
WrapPanel wrap = new WrapPanel();
scroll.Content = wrap;
3)對於ScrollViewer的使用,這是一個複合控制元件,其滾動條端點的箭頭,是一個RepeatButton,這個按鈕上也有Click事件。所以在ScrollViewer的Click方法中,要判斷e.Source的轉型是否成功:
if (btn != null)
{
//do something
}
4)在有限的空間內放入很多元素,傳統使用ScrollViewer,WPF建議使用ViewBox:
Content = view;
view.Child = grid;
第6章 Stack和Wrap
1)GridSplitter
GridSplitter派生於Thumb,只能使用於Grid,而且要指定它所在的row和column位置(以及行和列的span):
split.Width = 6;
grid.Children.Add(split);
Grid.SetColumn(split, 2);
Grid.SetRow(split, 1);
GridSplitter可以和其它元素共享相同的單元格,這就存在被遮擋的問題——後出現的元素在前面,為此,需要設定margin,以避免重疊:
split.Margin = new Thickness(10);
一般會讓GridSplitter跨越整行或整列,比較合理:
Grid.SetRowSpan(split, 3);
Grid.SetColumnSpan(split, 3);
一般把GridSplitter單獨放在一個或一組單元格中
2)UniformGrid
類似於Grid,不同之處在於,UniformGrid所有行都等寬,所有列都等高,可以簡單進行設定:
unigrid.Rows = 2;
unigrid.Columns = 3;
UniformGrid沒有附屬屬性,來為其內部的元素指定位置,只能根據加入元素的順序,依次增加索引值。
Unigrid.Children.Add(btn);
第7章
1)Polygon的使用:
Polygon poly = new Polygon();
poly.Points = new PointCollection();
新建立的Polygon物件,其Points屬性為null。為此之後要新增一系列Point到其中:
poly.Points.Add(new Point(0, 0));
poly.Points.Add(new Point(1, 1));
另一種使用方法,直接新增Point陣列:
{
new Point(0,0),
new Point(1,1)
});
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15123181/viewspace-422938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【讀書筆記】JavaScript高階程式設計(第3版)(第5-7章)筆記JavaScript程式設計
- 讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- webpackDemo讀書筆記Web筆記
- Vue讀書筆記Vue筆記
- 散文讀書筆記筆記
- Cucumber讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- postgres 讀書筆記筆記
- 讀書筆記2筆記
- 讀書筆記3筆記
- js高程讀書筆記JS筆記
- 《論語》讀書筆記筆記
- 《重構》讀書筆記筆記
- PMBook讀書筆記(一)筆記
- 《如何有效閱讀一本書》讀書筆記筆記
- 《將心注入》讀書筆記筆記
- Raft論文讀書筆記Raft筆記
- 讀書筆記-沒有空白筆記
- JVM讀書筆記之OOMJVM筆記OOM
- swift語法-讀書筆記Swift筆記
- 【GO】《GO HANDBOOK》讀書筆記Go筆記
- 讀書筆記(2)《微精通》筆記
- 《Effective C++》讀書筆記C++筆記
- 編譯原理讀書筆記編譯原理筆記
- 類載入讀書筆記筆記
- 《Effective-Ruby》讀書筆記筆記
- 《CSS揭祕》讀書筆記CSS筆記
- 《圖解 HTTP》 讀書筆記圖解HTTP筆記
- 產品讀書筆記-需求筆記
- C++讀書筆記:字串C++筆記字串
- 今日隨筆-構建之法讀書筆記筆記
- 《高效能JavaScript》讀書筆記JavaScript筆記
- 《Google File System》讀書筆記(1)Go筆記
- 讀書筆記-資訊收集1筆記
- 黑客與畫家讀書筆記黑客筆記
- 深入淺出node讀書筆記筆記
- 五月的讀書筆記筆記
- 《Head First Java》20201017讀書筆記Java筆記