應用開發第一步
功能分類:頁面上的功能區域劃分。。。。需求分析 ?業務邏輯 ? ? 數據流 ? ?功能模塊 ? ?UI/UX ? ? 編碼 ? ? 測試 ? ? 發布 功能開發與布局
不用顯式的方式設定元素的尺寸 不使用屏幕坐標來指定位置
Grid
功能最強大,布局最靈活的容器
主要屬性配置:ColumnDefinitions(ColumnDefinition)、RowDefinitions(RowDefinition)
? ? ? ? ? ? ? ? ? ? ? ?ShowGridLines、IsSharedSizeScope(SharedSizeGroup)
? ? ? ? ? ? ? ? ? ? ? ?給子項控件使用:Grid.Row ? ?Grid.Column
使用場景:廣泛,不知道用什么布局,就用Grid,意外(WrapPanel)
StackPanel
最簡單的布局容器之一
主要屬性配置:Orientation-調整排列方向、FlowDirection
使用場景:圖文并顯、工具欄
可以Grid代替
WrapPanel
唯一一個不能被Grid替代的布局控件,水平方向排列,過程中當前子項出界了,進行折行
主要屬性配置:Orientation-調整排列方向
使用場景:桌面式圖標排列、搜索歷史關鍵詞排列
DockPanel
通過設置Dock停靠進行布局
主要屬性配置:LastChildFill、DockPanel.Dock
使用場景:應用的主窗口布局(標題欄、狀態欄、工具欄、菜單欄)
UniformGrid
另一種行列風格布局,自動生成統一一致的行列
主要屬性配置:Columns、Rows ? ?指定的是當前區域均分多少行和列,不存在指定行高和列寬
使用場景:9宮格的功能區域、圖表
Canvas
通過精確坐標定位放置子元素
主要屬性配置:Canvas.Left、Top、Right、Bottom
使用場景:組態、組件封裝(儀表)

InkCanvas
支持任意筆畫輸入的畫布組件
主要屬性配置:
使用場景:
畫筆
橡皮擦
魔術棒
其他 文字筆記識別
WPF UI InkCanvas 導師演示畫板 演示 筆記 畫筆 識別-CSDN博客
Border
最基礎的裝飾控件
主要屬性配置:
使用場景:
技能提升 布局功能擴展與自定義
功能需求: 繼承Panel的對象,測量與排列
后端
protected override Size MeasureOverride(Size availableSize)
{double total_y = 0;foreach (UIElement item in this.InternalChildren){item.Measure(availableSize);total_y += item.DesiredSize.Height;}return new Size(availableSize.Width, total_y);
}protected override Size ArrangeOverride(Size finalSize)
{double offset_y = 0;foreach (UIElement item in this.InternalChildren){item.Arrange(new Rect(0, offset_y, finalSize.Width, item.DesiredSize.Height));offset_y += item.DesiredSize.Height;}return base.ArrangeOverride(finalSize);
}
擴展
public int ColumnSpace { get; set; } = 0;
public int RowSpace { get; set; } = 0;protected override Size MeasureOverride(Size availableSize)
{//var perHeight = availableSize.Height / Math.Ceiling(this.InternalChildren.Count * 0.1 / 3);var perWidth = (availableSize.Width - ColumnSpace * 2) / 3;double total_y = 0;foreach (UIElement item in this.InternalChildren){item.Measure(new Size(perWidth, availableSize.Height));total_y = item.DesiredSize.Height;}return new Size(availableSize.Width, total_y);
}protected override Size ArrangeOverride(Size finalSize)
{double offset_y = 0;double offset_x = 0;var perWidth = (finalSize.Width - ColumnSpace * 2) / 3;for (int i = 1; i < this.InternalChildren.Count + 1; i++){UIElement item = this.InternalChildren[i - 1];item.Arrange(new Rect(offset_x, offset_y, perWidth, item.DesiredSize.Height));if (i % 3 == 0){offset_x = 0;offset_y += item.DesiredSize.Height + RowSpace;}elseoffset_x += perWidth + ColumnSpace;}return base.ArrangeOverride(finalSize);
}
C# WPF 3D 數據孿生 系列六-CSDN博客
WPF 3D繪圖 點云 系列五-CSDN博客
WPF UI 3D 多軸 機械臂 stl 模型UI交互-CSDN博客
WPF UI 3D 基本概念 點線三角面 相機對象 材質對象與貼圖 3D地球 光源 變形處理 動作交互 輔助交互插件 系列三-CSDN博客