Xamarin.Forms 常见的控件属性、方法和事件
Xamarin.FormsVisualElement
类是 Xamarin.Forms 应用程序中使用的大部分控件的基类。 VisualElement
类定义许多 属性、 方法,以及派生类中使用的 事件。
属性
VisualElement
对象上提供了以下属性。
AnchorX
AnchorX
属性是一个 double
值,用于定义 X 轴上的中心点进行缩放和旋转等转换。 默认值为 0.5。
AnchorY
AnchorY
属性是一个 double
值,用于定义 Y 轴上的中心点,用于缩放和旋转等转换。 默认值为 0.5。
Background
Background
属性是一个 Brush
值,使画笔可用作任何控件中的背景。 默认值为 Brush.Default
。
BackgroundColor
BackgroundColor
属性是确定控件背景色的 Color
。 如果未设置,背景将是默认 Color
对象,该对象呈现为透明。
Behaviors
Behaviors
属性是 Behavior
对象的 List
。 行为使你可以通过将可重用功能添加到 Behaviors
列表来将可重用功能附加到元素。 有关 Behavior
类的详细信息,请参阅Xamarin.Forms 行为。
Bounds
Bounds
属性是一个只读 Rectangle
对象,表示控件占用的空间。 Bounds
属性值是在布局周期内分配的。 包含Rectangle
struct
用于测试矩形交集和包含的有用属性和方法。 有关详细信息,请参阅Xamarin.Forms 矩形 API。
Clip
Clip
属性是一个定义元素内容的大纲的 Geometry
对象。 若要定义剪辑,请使用 Geometry
对象(如 EllipseGeometry
)设置元素的 Clip
属性。 只有几何图形区域内的区域才会可见。 有关详细信息,请参阅使用几何图形进行剪切。
Effects
Effects
属性是继承自 Element
类的 Effect
对象的 List
。 效果允许自定义本机控件,通常用于小幅样式更改。 有关 Effect
类的详细信息,请参阅Xamarin.Forms 效果。
FlowDirection
FlowDirection
属性是一个 FlowDirection
枚举值。 流方向可以设置为 MatchParent
、LeftToRight
或 RightToLeft
并确定布局顺序和方向。 FlowDirection
属性通常用于支持从右到左读取的语言。
Height
Height
属性是描述控件呈现高度的只读 double
值。 Height
属性是在布局周期内计算的,不能直接设置。 可以使用 HeightRequest 属性请求控件的高度。
HeightRequest
HeightRequest
属性是一个确定控件所需高度的 double
值。 控件的绝对高度可能与请求的值不匹配。 有关详细信息,请参阅请求属性。
InputTransparent
InputTransparent
属性是一个 bool
,用于确定控件是否接收用户输入。 默认值为 false
,确保元素接收输入。 此属性在设置时传输到子元素。 将 InputTransparent
属性设置为 true
布局类将导致布局中的所有元素不接收输入。
IsEnabled
IsEnabled
属性是一个 bool
值,用于确定控件是否对用户输入做出反应。 默认值为 true
。 将此属性设置为 false 将阻止控件接受用户输入。
IsFocused
IsFocused
属性是一个 bool
值,该值描述控件当前是否为焦点对象。 对控件调用 Focus
方法将导致将 IsFocused
值设置为 true。 调用 Unfocus
方法会将此属性设置为 false。
IsTabStop
IsTabStop
属性是一个 bool
值,用于定义当用户使用 Tab 键通过控件时是否接收焦点。 如果此属性为 false,则 TabIndex
属性将不起作用。
IsVisible
IsVisible
属性是一个 bool
值,用于确定是否呈现控件。 不会显示 IsVisible
属性设置为 false 的控件,也不会在布局周期内考虑空间计算,也不能接受用户输入。
MinimumHeightRequest
MinimumHeightRequest
属性是一个 double
值,用于确定当两个元素争用有限的空间时如何处理溢出。 设置 MinimumHeightRequest
属性允许布局过程将元素缩减到请求的最小维度。 如果未指定 MinimumHeightRequest
,则默认值为 -1,布局过程会将 HeightRequest
视为最小值。 这意味着没有 MinimumHeightRequest
值的元素将不具有可缩放的高度。
有关详细信息,请参阅最小请求属性。
MinimumWidthRequest
MinimumWidthRequest
属性是一个 double
值,用于确定当两个元素争用有限的空间时如何处理溢出。 设置 MinimumWidthRequest
属性允许布局过程将元素缩减到请求的最小维度。 如果未指定 MinimumWidthRequest
,则默认值为 -1,布局过程会将 WidthRequest
视为最小值。 这意味着没有 MinimumWidthRequest
值的元素将没有可缩放的宽度。
有关详细信息,请参阅最小请求属性。
Opacity
Opacity
属性是一个从零到零的 double
值,用于确定呈现过程中控件的不透明度。 此属性的默认值为 1.0。 从 0 到 1 的范围之外的值将被固定。 仅当 IsVisible
属性 true
时,才会应用 Opacity
属性。 不透明度以迭代方式应用。 因此,如果父控件具有 0.5 不透明度,并且其子控件具有 0.5 不透明度,则子控件将以有效的 0.25 不透明度值呈现。 将输入控件的 Opacity
属性设置为 0 具有未定义的行为。
Parent
Parent
属性继承自 Element
类。 此属性是作为控件父级的 Element
对象。 当 Parent
属性添加为另一个元素的子元素时,通常会自动设置该属性。
Resources
Resources
属性是一个 ResourceDictionary
实例,该实例使用通常在运行时从 XAML 填充的键/值对填充。 此字典允许应用程序开发人员在编译时和运行时重复使用 XAML 中定义的对象。 字典中的键是从 XAML 标记的 x:Key
属性填充的。 从 XAML 创建的对象将插入到指定键的 ResourceDictionary
中。 初始化后。
有关详细信息,请参阅资源字典。
Rotation
Rotation
属性是一个介于零到 360 之间的 double
值,用于定义以度为单位的 Z 轴的旋转。 此属性的默认值为 0。 相对于 AnchorX
和 AnchorY
值应用旋转。
RotationX
RotationX
属性是一个介于零到 360 之间的 double
值,用于定义 X 轴的旋转(以度为单位)。 此属性的默认值为 0。 相对于 AnchorX
和 AnchorY
值应用旋转。
RotationY
RotationY
属性是一个介于零和 360 之间的 double
值,用于定义以度为单位的 Y 轴的旋转。 此属性的默认值为 0。 相对于 AnchorX
和 AnchorY
值应用旋转。
Scale
Scale
属性是一个定义控件刻度 double
值。 此属性的默认值为 1.0。 缩放相对于 AnchorX
和 AnchorY
值应用。
ScaleX
ScaleX
属性是一个 double
值,用于定义沿 X 轴的控件刻度。 此属性的默认值为 1.0。 ScaleX
属性相对于 AnchorX
值应用。
ScaleY
ScaleY
属性是一个 double
值,用于定义沿 Y 轴的控件刻度。 此属性的默认值为 1.0。 ScaleY
属性相对于 AnchorY
值应用。
Style
Style
属性继承自 NavigableElement
类。 此属性是 Style
类的实例。 Style
类包含定义视觉元素外观和行为的触发器、资源库和行为。 有关详细信息,请参阅 Xamarin.Forms XAML 样式。
StyleClass
StyleClass
属性是表示 Style
类名称的 string
对象列表。 此属性继承自 NavigableElement
类。 StyleClass
属性允许将多个样式属性应用于 VisualElement
实例。 有关详细信息,请参阅Xamarin.Forms 样式类。
TabIndex
TabIndex
属性是一个 int
值,该值使用 Tab 键在通过控件前进时定义控件顺序。 TabIndex
属性是在 ITabStopElement
接口上定义的属性的实现,VisualElement
类实现该属性。
TranslationX
TranslationX
属性是一个 double
值,用于定义要在 X 轴上应用的增量转换。 转换在布局后应用,通常用于应用动画。 转换其父容器边界外的元素可能会阻止输入正常工作。
有关详细信息,请参阅 Xamarin.Forms 中的动画。
TranslationY
TranslationY
属性是一个 double
值,用于定义要在 Y 轴上应用的增量转换。 转换在布局后应用,通常用于应用动画。 转换其父容器边界外的元素可能会阻止输入正常工作。
有关详细信息,请参阅 Xamarin.Forms 中的动画。
Triggers
Triggers
属性是 TriggerBase
对象的只读 List
。 触发器允许应用程序开发人员在 XAML 中表达操作,以更改控件的视觉外观以响应事件或属性更改。 有关详细信息,请参阅 Xamarin.Forms 触发器。
Visual
Visual
属性是一个 IVisual
实例,使呈现器能够创建和选择性地应用于 VisualElement
实例。 Visual
属性设置为与其父级匹配,因此在组件上定义呈现器也适用于该组件的任何子级。 如果未对控件或其上级设置自定义呈现器,将使用默认 Xamarin.Forms 呈现器。 有关详细信息,请参阅 Xamarin.Forms Visual。
Width
Width
属性是描述控件呈现宽度的只读 double
值。 Width
属性是在布局周期内计算的,不能直接设置。 可以使用 WidthRequest 属性请求控件的宽度。
WidthRequest
WidthRequest
属性是确定控件所需宽度的 double
值。 控件的绝对宽度可能与请求的值不匹配。 有关详细信息,请参阅请求属性。
X
X
属性是描述控件当前位置的只读 double
值。
Y
Y
属性是描述控件当前 Y 位置的只读 double
值。
方法
VisualElement
类上提供了以下方法。 有关完整列表,请参阅 VisualElement API 方法。
FindByName
FindByName
方法继承自 Element
类,具有以下签名:
public object FindByName (string name)
此方法搜索提供 name
参数的所有子元素,并返回具有指定名称的元素。 如果未找到匹配项,则返回 null
。
Focus
Focus
方法尝试设置对元素的焦点。 此方法具有以下签名:
public bool Focus ()
如果成功设置键盘焦点,Focus
方法返回 true
;如果方法调用未导致焦点更改,则返回 false
。 该元素必须能够接收焦点才能使此方法正常工作。 对屏幕外或未实现的元素调用 Focus
方法具有未定义的行为。
Unfocus
Unfocus
方法尝试删除对元素的焦点。 此方法具有以下签名:
public void Unfocus ()
该元素必须已具有使此方法正常工作的焦点。
事件
VisualElement
类上提供了以下事件。 有关完整列表,请参阅 Xamarin.Forms VisualElement 事件。
Focused
每当 VisualElement
实例收到焦点时,将引发 Focused
事件。 此事件不会通过 Xamarin.Forms 堆栈气泡,它直接从本机控件接收。 此事件由 IsFocused
属性资源库发出。
SizeChanged
每当 VisualElement
实例 Height
或 Width
属性发生更改时,将引发 SizeChanged
事件。 如果开发人员希望直接响应大小更改,而不是响应更改后事件,则应改为实现 OnSizeAllocated
虚拟方法。
Unfocused
每当 VisualElement
实例失去焦点时,就会引发 Unfocused
事件。 此事件不会通过 Xamarin.Forms 堆栈气泡,它直接从本机控件接收。 此事件由 IsFocused
属性资源库发出。
度量单位
Android、iOS 和 UWP 平台都具有不同的度量单位,这些度量单位可能因设备而异。 Xamarin.Forms 使用独立于平台的度量单位,以规范化设备和平台中的单位。 在 Xamarin.Forms 中,每英寸有 160 个单位,即每厘米有 64 个单位。
请求属性
名称包含“request”的属性定义所需的值,该值可能与实际呈现的值不匹配。 例如,HeightRequest
可能设置为 150,但如果布局仅允许 100 个单位的空间,则呈现的控件 Height
将仅为 100。 呈现的大小受可用空间和包含组件的影响。
最小请求属性
最小请求属性包括 MinimumHeightRequest
和 MinimumWidthRequest
,旨在更准确地控制元素如何处理彼此的溢出。 但是,与这些属性相关的布局行为有一些重要的注意事项。
未指定的最小属性值
如果未设置最小值,则最小值默认为 -1。 布局过程忽略此值,并将绝对值视为最小值。 此行为的实际后果是,没有指定最小值 的元素不会收缩。 指定了最小值的元素将收缩。
以下 XAML 显示了水平 StackLayout
中的两个 BoxView
元素:
<StackLayout Orientation="Horizontal">
<BoxView HeightRequest="100" BackgroundColor="Purple" WidthRequest="500"></BoxView>
<BoxView HeightRequest="100" BackgroundColor="Green" WidthRequest="500" MinimumWidthRequest="250"></BoxView>
</StackLayout>
第一个 BoxView
实例请求宽度为 500 且未指定最小宽度。 第二个 BoxView
实例请求宽度为 500,最小宽度为 250。 如果父 StackLayout
元素不够宽,无法以请求的宽度包含这两个组件,则布局进程会将第一个 BoxView
实例视为最小宽度为 500,因为未指定其他有效最小值。 允许第二个 BoxView
实例纵向缩减到 250 个实例,它将缩小以适应大小,直到其宽度达到 250 个单位。
如果所需的行为是让第一个 BoxView
实例缩减且没有最小宽度,则必须将 MinimumWidthRequest
设置为有效值,例如 0。
最小值和绝对属性值
当最小值大于绝对值时,该行为是未定义的。 例如,如果 WidthRequest
设置为 100,则 MinimumWidthRequest
属性不应超过 100。 指定最小值时,应始终指定绝对值以确保绝对值大于最小值。
网格中的最小属性
Grid
布局有自己的系统,用于相对调整行和列的大小。 在 Grid
布局中使用 MinimumWidthRequest
或 MinimumHeightRequest
将不起作用。 有关详细信息,请参阅Xamarin.Forms 网格。