【问题标题】:Get default TitleBar height programmatically before a titlebar is created?在创建标题栏之前以编程方式获取默认标题栏高度?
【发布时间】:2017-06-23 08:10:14
【问题描述】:

我正在为我的 uwp 应用创建自定义标题栏。我要匹配系统栏的高度。

可能能够达到这个高度

CoreApplication.GetCurrentView().TitleBar.Height

但这取决于很多事情。标题栏可能尚未调整大小。

我还看到了一个建议(来自 winforms)来查看窗口顶部和内容视图顶部的 y 坐标的差异。但这又似乎很可疑。一方面,一旦我将 ExtendViewIntoTitleBar 设置为 true,我认为该方法不会起作用。

是否有可靠的方法以编程方式获取默认高度?

【问题讨论】:

  • reliable to get programmatically the default height -> 这个东西的问题是你有多个可以运行UWP的设备,所以每个设备的默认高度也会不同。此外,一旦布局完全加载,标题栏中可能会有不同的对象,这意味着高度将被调整大小并且之前无法计算(除了遍历所有子元素并获取其大小)。因此,我会考虑从WindowSize - ViewSize 计算这个。

标签: c# uwp titlebar custom-titlebar


【解决方案1】:

我知道此时此答案可能对最初提出问题的人没有用,但我仍然想建议答案:

您可以为标题栏的大小更改时注册一个处理程序。 (文档提到尺寸变化,但它可能只是标题按钮的偏移量而不是高度) 这段代码对我来说很有效,至少目前是这样

//Put the below line in the Page initialization/OnNavigated function
var coreTitleBar = CoreApplication.GetCurrentView().TitleBar;
coreTitleBar.ExtendViewIntoTitleBar = true;
coreTitleBar.LayoutMetricsChanged += CoreTitleBar_LayoutMetricsChanged;

private void CoreTitleBar_LayoutMetricsChanged(CoreApplicationViewTitleBar sender, object args)
{
     MyAppTitleBar.Height = sender.Height;
}

只要 titleBar 的尺寸发生变化(如 DPI 变化),上述代码就会自动调用您的函数 (CoreTitleBar_LayoutMetricsChanged)。这里,MyAppTitleBar 是我为自定义标题栏制作的Grid

更多信息可以找到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多