# UMG入门
# 常用控件
- Border:它是一个只包含子控件的容器控件,能够使用一张背景图片来包裹它,并调整内边距。
 - Button:按钮控件。关于Visibility注意Not Hit-Testable(Self & All Children)和Not Hit-Testable(Self Only)区别。一个是该控件及其子控件一块不能同鼠标交互,另一个是该控件不能同鼠标交互,但其子控件能同鼠标交互。
 - Image:图像控件。
 - Text,EditableText:文本框。如果想要实现字体换行:
- Default Wrapping:当文本中有空格会换行。
 - AllowPerCharacterWrapping:每个字母都会直接换行。
 
 - RichTextBlock:需要设置TextStyleSet,创建DataTable,选择RichTextStyle。
 - Slider:滚动条。
 - ProgressBar:进度条。可以选择使用Marquee跑马灯效果。
 - ExpandableArea:是否显示某个区域。
 - ComboBox:下拉菜单框。
 - SpinBox:输入一个范围的数值。
 - checkbox:勾选框。
 
# Panel
下面是常用的Panel:
- CanvasPanel:允许widget在里面以绝对位置摆放,放置锚点,以z-ordered来前后摆放控件。在手动摆放的时候这个控件很友好,在程序化生成控件的时候不太方便。
 - GridPanel:很容易调控其中控件的宽和高。
 - HorizontalBox:水平控制控件。
 - VerticalBox:垂直控制控件。
 - Overlay:允许其中控件在其他控件上叠加。
 - ScaleBox:内部控件按固定宽高比来缩放。
 - ScrollBox:滑条插件,超出内容将使用滚动条隐藏。
 - SizeBox:将内部控件控制在预定大小。
 - UniformGridPanel:将所有子控件所占控件均分。
 - WrapBox:从左到右或从上到下来安排子控件,超出尺寸的控件将安排在下一行。
 - WidgetSwitcher:切换控件。
 
# 常用接口
- EventOnTouchStarted:开始触摸屏幕时调用。
 - EventOnTouchMoved:在屏幕上移动时调用。
 - EventOnTouchGesture:捕获手势。
 - EventOnTouchEnded:结束触摸时调用。
 - EventOnRemovedFromFocusPath:当前控件或它的子控件获取焦点时将其加入到FocusPath中,如果它之前不是FocusPath的一部分,则触发该事件。
 - EventOnAddedToFocusPath:当前控件或它的子控件失去焦点时触发该事件,当前控件会从FocusPath中移除。
 - OnMouseButtonDown:如果鼠标点击了这个控件,就会触发,而且事件是会冒泡的。
 - OnMouseMove:如果鼠标在控件上移动触发,事件会冒泡。
 - OnKeyDown:在控件获取焦点时,按下键来触发。
 - OnPreviewMouseButtonDown:当鼠标点击时触发,同上面不同的是它使用的是tunnel而不是冒泡,这个事件发送了就不会发送上面的的事件,还可通过MyGeometry获取:
- GetAbsoluteSize:获取绝对尺寸
 - AbsoluteToLocal:世界坐标转换为相对坐标,如果MyGeometry是通过slate传过来的,则获取slate下的相对坐标。
 - GetLocalSize:获取相对Size
 - IsUnderLocation:判断是否在某个相对坐标之下
 - LocalToAbsolute:相对坐标转为绝对坐标
 - LocalToViewport:相对坐标转换为视口坐标
 
 - OnPreviewKeyDown:控件获得焦点时,按下键盘的键会触发该事件。
 - EventOnAnimationStart:播放动画开始时触发。
 - EventOnAnimationFinished:播放动画结束后触发。
 
# 绘制接口
OnPaint是一个绘制图形的重要接口。
下面是一个绘制box的例子:

它常用的接口有:
- DrawBox
 - DrawLine
 - DrawLines
 - DrawText
 
# 背包图标拖拽
这是一个背包图标拖拽的实例:
- 先创建要使用的userwidget:
- MainUI:主界面
 - Inventory:背包界面
 - InventorySlot:背包格子
 - DragICON:拖拽图标
 - MyDragDropOperation:拖拽管理类

 
 - 创建相应的界面:
- 创建InventorySlot界面

 - 创建DragICON界面

 - 创建MyDragDropOperation

 - 创建Inventory界面

 - 创建MainUI界面

 
 - 创建InventorySlot界面
 - 创建InventorySlot的逻辑:
- 重写OnMouseButtonDown:

 - 创建EventGraph:

 - 重写OnDragDetected:

 - 重写OnDrop:

 
 - 重写OnMouseButtonDown:
 - 创建DragICON的逻辑: