WPF使用Canvas畫布面板布局
Canvas:畫布面板
畫布,用于完全控制每個(gè)元素的精確位置。他是布局控件中最為簡(jiǎn)單的一種,直接將元素放到指定位置,主要來(lái)布置圖面。使用Canvas,必須指定一個(gè)子元素的位置(相對(duì)于畫布),否則所有元素都將出現(xiàn)在畫布的左上角。調(diào)整位置用Left、Right、Top和Bottom四個(gè)附加屬性。如果Canvas是窗口主元素(即最外層的布局面板是Canvas),用戶改變窗口大小時(shí),Canvas也會(huì)隨之變化,子元素的位置也會(huì)隨之移動(dòng),以保證相對(duì)于Canvas的位置屬性不變。
Canvas允許子元素的部分或全部超過(guò)其邊界,默認(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)行裁剪:

注意:要說(shuō)明一點(diǎn)Canvas內(nèi)的子控件不能使用兩個(gè)以上的Canvas附加屬性,如果同時(shí)設(shè)置Canvas.Left和Canvas.Right屬性,那么后者將會(huì)被忽略。
ZIndex屬性
Canvas面板中可能會(huì)有多個(gè)相互重疊的元素,可以設(shè)置Canvas的ZIndex附加屬性,來(lái)控制他們的重疊方式 ZIndex屬性默認(rèn)值都是0,屬性值必須是整數(shù)。
如圖所示:

除此之外,我們還可以通過(guò)代碼的方式設(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)文章
基于ASP.NET+easyUI框架實(shí)現(xiàn)圖片上傳功能(表單)
這篇文章主要介紹了基于ASP.NET+easyUI框架實(shí)現(xiàn)圖片上傳功能的相關(guān)資料,需要的朋友可以參考下2016-06-06
ASP.NET Core中如何使用表達(dá)式樹創(chuàng)建URL詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何使用表達(dá)式樹創(chuàng)建URL的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
淺談.Net并行計(jì)算之?dāng)?shù)據(jù)并行
這篇文章主要介紹了.Net并行計(jì)算之?dāng)?shù)據(jù)并行,有需要的朋友可以參考一下2013-12-12
徹底解決ASP.NET MD5加密中文結(jié)果和ASP不一致的問題
ASP.NET MD5加密中文結(jié)果和ASP不一致的問題的解決方法2009-07-07
.NET/C#利用反射調(diào)用含ref或out參數(shù)的方法示例代碼
這篇文章主要給大家介紹了關(guān)于.NET/C#利用反射調(diào)用含ref或out參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
ASP.NET Core MVC解決控制器同名Action請(qǐng)求不明確的問題
這篇文章主要介紹了ASP.NET Core MVC解決控制器同名Action請(qǐng)求不明確的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
.NET Core/Framework如何創(chuàng)建委托大幅度提高反射調(diào)用的性能詳解
反射是一種很重要的技術(shù),下面這篇文章主要給大家介紹了關(guān)于.NET Core/Framework如何創(chuàng)建委托大幅度提高反射調(diào)用性能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09

