WPF使用Canvas畫布面板布局
Canvas:畫布面板
畫布,用于完全控制每個元素的精確位置。他是布局控件中最為簡單的一種,直接將元素放到指定位置,主要來布置圖面。使用Canvas,必須指定一個子元素的位置(相對于畫布),否則所有元素都將出現(xiàn)在畫布的左上角。調整位置用Left、Right、Top和Bottom四個附加屬性。如果Canvas是窗口主元素(即最外層的布局面板是Canvas),用戶改變窗口大小時,Canvas也會隨之變化,子元素的位置也會隨之移動,以保證相對于Canvas的位置屬性不變。
Canvas允許子元素的部分或全部超過其邊界,默認不會裁剪子元素,同時可以使用負坐標,即溢出的內容會顯示在Canvas外面,這是因為默認 ClipToBounds=”False”,因此畫布不需要指定大小。如果想復制畫布內容,將ClipToBounds設為true即可。
1、子元素不超出邊界
使用XAML代碼實現(xiàn):
<Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Canvas面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> <Canvas> <TextBox Width="100" BorderBrush="Blue"></TextBox> <TextBox Canvas.Left="200" Canvas.Top="50" Width="100" BorderBrush="Green"></TextBox> <Button Height="20" Canvas.Right="10" Canvas.Bottom="10" Content="按鈕"></Button> </Canvas> </Window>
2、子元素超出邊界
使用XAML代碼實現(xiàn):
<Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Canvas面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> <Canvas> <TextBox Width="100" BorderBrush="Blue"></TextBox> <TextBox Canvas.Left="200" Canvas.Top="50" Width="100" BorderBrush="Green"></TextBox> <Button Height="200" Canvas.Right="10" Canvas.Bottom="-130" Content="按鈕"></Button> </Canvas> </Window>
在XAML設計界面,超出的部分不會進行裁剪,如圖所示:
如果將ClipToBounds屬性設為true,在設計界面將會對子元素的超出部分進行裁剪:
注意:要說明一點Canvas內的子控件不能使用兩個以上的Canvas附加屬性,如果同時設置Canvas.Left和Canvas.Right屬性,那么后者將會被忽略。
ZIndex屬性
Canvas面板中可能會有多個相互重疊的元素,可以設置Canvas的ZIndex附加屬性,來控制他們的重疊方式 ZIndex屬性默認值都是0,屬性值必須是整數(shù)。
如圖所示:
除此之外,我們還可以通過代碼的方式設置ZIndex的值,代碼如下:
using System.Windows; using System.Windows.Controls; namespace CanvasDemo { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary> /// 點擊按鈕,修改ZIndex屬性值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnClick_Click(object sender, RoutedEventArgs e) { // 設置按鈕的ZIndex屬性 Canvas.SetZIndex(this.btn, 2); } } }
到此這篇關于WPF使用Canvas畫布面板布局的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫
這篇文章主要介紹了在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02ASP.NET Core 7 Razor Pages項目發(fā)布到IIS的詳細過程
這篇文章主要介紹了ASP.NET Core 7 Razor Pages項目發(fā)布到IIS的詳細過程,詳細介紹了發(fā)布過程遇到的問題及解決方法,對ASP.NET Core 發(fā)布到IIS相關知識感興趣的朋友一起看看吧2023-01-01ASP.NET Core應用錯誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯誤頁面”
這篇文章主要給大家介紹了關于ASP.NET Core應用錯誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯誤頁面”的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧2019-01-01用C#中的params關鍵字實現(xiàn)方法形參個數(shù)可變
個人認為,提供params關鍵字以實現(xiàn)方法形參個數(shù)可變是C#語法的一大優(yōu)點。在方法形參列表中,數(shù)組類型的參數(shù)前加params關鍵字,通??梢栽谡{用方法時代碼更加精練2012-01-01Excel、記事本數(shù)據(jù)導入到數(shù)據(jù)庫的實現(xiàn)方法
將手機號批量導入數(shù)據(jù)庫。思路:先將要導入的文件傳上項目里,然后讀取文件的每行數(shù)據(jù)并插入數(shù)據(jù)庫,操作完后再將上傳的文件刪除2013-10-10