WPF使用Canvas畫布面板布局
Canvas:畫布面板
畫布,用于完全控制每個(gè)元素的精確位置。他是布局控件中最為簡單的一種,直接將元素放到指定位置,主要來布置圖面。使用Canvas,必須指定一個(gè)子元素的位置(相對(duì)于畫布),否則所有元素都將出現(xiàn)在畫布的左上角。調(diào)整位置用Left、Right、Top和Bottom四個(gè)附加屬性。如果Canvas是窗口主元素(即最外層的布局面板是Canvas),用戶改變窗口大小時(shí),Canvas也會(huì)隨之變化,子元素的位置也會(huì)隨之移動(dòng),以保證相對(duì)于Canvas的位置屬性不變。
Canvas允許子元素的部分或全部超過其邊界,默認(rèn)不會(huì)裁剪子元素,同時(shí)可以使用負(fù)坐標(biāo),即溢出的內(nèi)容會(huì)顯示在Canvas外面,這是因?yàn)槟J(rèn) ClipToBounds=”False”,因此畫布不需要指定大小。如果想復(fù)制畫布內(nèi)容,將ClipToBounds設(shè)為true即可。
1、子元素不超出邊界
使用XAML代碼實(shí)現(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代碼實(shí)現(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設(shè)計(jì)界面,超出的部分不會(huì)進(jìn)行裁剪,如圖所示:
如果將ClipToBounds屬性設(shè)為true,在設(shè)計(jì)界面將會(huì)對(duì)子元素的超出部分進(jìn)行裁剪:
注意:要說明一點(diǎn)Canvas內(nèi)的子控件不能使用兩個(gè)以上的Canvas附加屬性,如果同時(shí)設(shè)置Canvas.Left和Canvas.Right屬性,那么后者將會(huì)被忽略。
ZIndex屬性
Canvas面板中可能會(huì)有多個(gè)相互重疊的元素,可以設(shè)置Canvas的ZIndex附加屬性,來控制他們的重疊方式 ZIndex屬性默認(rèn)值都是0,屬性值必須是整數(shù)。
如圖所示:
除此之外,我們還可以通過代碼的方式設(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> /// 點(diǎn)擊按鈕,修改ZIndex屬性值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnClick_Click(object sender, RoutedEventArgs e) { // 設(shè)置按鈕的ZIndex屬性 Canvas.SetZIndex(this.btn, 2); } } }
到此這篇關(guān)于WPF使用Canvas畫布面板布局的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫
這篇文章主要介紹了在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02asp.net安全、實(shí)用、簡單的大容量存儲(chǔ)過程分頁
昨晚研究到2點(diǎn)多,對(duì)網(wǎng)絡(luò)上主流的分頁存儲(chǔ)過程大體看了一遍,但對(duì)安全以及如何使用很多文章都沒有過多的提及,而我要在這些文章的基礎(chǔ)上總結(jié)出一個(gè)比較實(shí)用的分頁存儲(chǔ)過程,方便大家在以后的項(xiàng)目中使用。2009-06-06.NET?Core使用Eureka實(shí)現(xiàn)服務(wù)注冊(cè)
這篇文章介紹了.NET?Core使用Eureka實(shí)現(xiàn)服務(wù)注冊(cè)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07ASP.NET Core 7 Razor Pages項(xiàng)目發(fā)布到IIS的詳細(xì)過程
這篇文章主要介紹了ASP.NET Core 7 Razor Pages項(xiàng)目發(fā)布到IIS的詳細(xì)過程,詳細(xì)介紹了發(fā)布過程遇到的問題及解決方法,對(duì)ASP.NET Core 發(fā)布到IIS相關(guān)知識(shí)感興趣的朋友一起看看吧2023-01-01ASP.NET Core應(yīng)用錯(cuò)誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯(cuò)誤頁面”
這篇文章主要給大家介紹了關(guān)于ASP.NET Core應(yīng)用錯(cuò)誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯(cuò)誤頁面”的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧2019-01-01.Net讀取Excel 返回DataTable實(shí)例代碼
這篇文章主要介紹了.Net讀取Excel 返回DataTable實(shí)例代碼,有需要的朋友可以參考一下2014-01-01用C#中的params關(guān)鍵字實(shí)現(xiàn)方法形參個(gè)數(shù)可變
個(gè)人認(rèn)為,提供params關(guān)鍵字以實(shí)現(xiàn)方法形參個(gè)數(shù)可變是C#語法的一大優(yōu)點(diǎn)。在方法形參列表中,數(shù)組類型的參數(shù)前加params關(guān)鍵字,通??梢栽谡{(diào)用方法時(shí)代碼更加精練2012-01-01Excel、記事本數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫的實(shí)現(xiàn)方法
將手機(jī)號(hào)批量導(dǎo)入數(shù)據(jù)庫。思路:先將要導(dǎo)入的文件傳上項(xiàng)目里,然后讀取文件的每行數(shù)據(jù)并插入數(shù)據(jù)庫,操作完后再將上傳的文件刪除2013-10-10