顶级控件
顶级控件充当视觉根,并且是所有顶级控件(例如Window
)的基类。它处理布局、样式和渲染的调度,以及跟踪客户端大小。大多数服务都通过顶级控件访问。
获取顶级控件
以下是两种常见的访问顶级控件实例的方法。
使用TopLevel.GetTopLevel
您可以使用TopLevel类的静态GetTopLevel
方法获取包含当前控件的顶级控件。
var topLevel = TopLevel.GetTopLevel(control);
// 在此处,您可以从topLevel实例引用各种服务,如Clipboard或StorageProvider。
如果您在用户控件或较低级别的组件中工作并且需要访问顶级控件的服务,此方法可能会有所帮助。
如果TopLevel.GetTopLevel
返回null,则可能控件尚未附加到根。为确保控件已附加,您应该处理Control.Loaded
和Control.Unloaded
事件,并从这些事件中跟踪当前顶级控件。
使用Window类
由于Window
类继承自TopLevel
,因此您可以直接从Window
实例访问服务:
var topLevel = window;
当您已经在窗口的上下文中工作时,例如在ViewModel或Window
类中的事件处理程序中,通常会使用此方法。
常见属性
ActualTransparencyLevel
获取平台能够提供的实际WindowTransparencyLevel
。
WindowTransparencyLevel ActualTransparencyLevel { get; }
ClientSize
获取窗口的客户端大小。
Size ClientSize { get; }
Clipboard
获取平台的Clipboard实现。
IClipboard? Clipboard { get; }
FocusManager
获取根的焦点管理器。
IFocusManager? FocusManager { get; }
FrameSize
获取顶级控件的总大小,包括系统框架(如果有)。
Size? FrameSize { get; }
InsetsManager
获取平台的InsetsManager实现。
IInsetsManager? InsetsManager { get; }
PlatformSettings
表示访问顶级平台特定设置的契约。
IPlatformSettings? PlatformSettings { get; }
RendererDiagnostics
获取一个值,指示渲染器是否应绘制特定的诊断信息。
RendererDiagnostics RendererDiagnostics { get; }
RenderScaling
获取用于渲染的缩放因子。
double RenderScaling { get; }
RequestedThemeVariant
获取或设置控件(及其子元素)用于资源确定的UI主题变体。您使用ThemeVariant指定的UI主题可以覆盖应用程序级别的ThemeVariant。
ThemeVariant? RequestedThemeVariant { get; set; }
StorageProvider
用于文件选择器和书签的文件系统存储服务。
IStorageProvider StorageProvider { get; }
TransparencyBackgroundFallback
获取或设置当不支持透明度时,透明度将与之混合的IBrush
。默认情况下,这是一个纯白色的画刷。
IBrush TransparencyBackgroundFallback { get; set; }
TransparencyLevelHint
获取或设置TopLevel在可能的情况下应使用的WindowTransparencyLevel
。接受多个值,按照回退顺序应用。例如,使用"Mica,Blur",Mica仅在支持它的平台上应用,其余平台上使用Blur。默认值是一个空数组或"None"。
IReadOnlyList<WindowTransparencyLevel> TransparencyLevelHint { get; set; }
常见事件
BackRequested
在按下物理返回按钮或请求后退导航时发生。
event EventHandler<RoutedEventArgs> BackRequested { add; remove; }
Closed
窗口关闭时触发。
event EventHandler Closed;
Opened
窗口打开时触发。
event EventHandler Opened;
ScalingChanged
当TopLevel的缩放发生变化时发生。
event EventHandler ScalingChanged;
常见方法
GetTopLevel
获取给定Visual
所托管的TopLevel
。
参数
control
要查询其TopLevel的可视对象
static TopLevel? GetTopLevel(Visual? visual)
RequestAnimationFrame
将回调排队,以在下一个动画刻度上调用
void RequestAnimationFrame(Action<TimeSpan> action)
RequestPlatformInhibition
请求抑制PlatformInhibitionType
。行为将保持抑制,直到返回值被释放。可用的PlatformInhibitionType
集取决于平台。如果在不支持此类型的平台上抑制行为,则请求将不起作用。
async Task<IDisposable> RequestPlatformInhibition(PlatformInhibitionType type, string reason)
TryGetPlatformHandle
尝试获取派生自TopLevel的控件的平台句柄。
IPlatformHandle? TryGetPlatformHandle()
更多信息
在_GitHub_上查看源代码 TopLevel.cs
"