无法单击 UWP 自定义标题栏按钮

Posted

技术标签:

【中文标题】无法单击 UWP 自定义标题栏按钮【英文标题】:UWP Custom TitleBar button could not be clicked 【发布时间】:2020-01-22 05:17:39 【问题描述】:

我有一个自定义的 TitleBar,它的视图已扩展到标题栏,这意味着我已经这样做了:

Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;

您可以从下图中看到,它只是一个后退按钮(当您导航到其他页面时可见)和一个TextBlock。但是,我无法单击该按钮。这是为什么?我已将标题栏放在NavigationView 上方。而且我也找不到那个按钮的Background。我已将其设置为透明,它应该显示它下面的颜色,但它没有。我也尝试过改变它周围元素的背景,但我的努力没有奏效。

我发布的图片只是窗口狭窄时的示例,窗口扩大时仍然是相同的情况。

这是该主页的 XAML 的结构,source code here:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <NavigationView
        x:Name="MainNavigationView"
        Grid.Row="1"
        IsBackButtonVisible="Collapsed"
        IsBackEnabled="True"
        Style="StaticResource MainNavigationViewStyle"
        TabNavigation="Cycle">
        <Frame
            x:Name="NaviFrame"
            IsNavigationStackEnabled="True"
            Navigated="NaviFrame_Navigated" />
    </NavigationView>
    <Grid
        x:Name="AppTitleBar"
        Height="32"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        Background="Transparent">
        <Border
            x:Name="AppTitleBorder"
            Width="x:Bind MainNavigationView.OpenPaneLength"
            HorizontalAlignment="Left"
            VerticalAlignment="Stretch"
            Background="Transparent" />
        <StackPanel Orientation="Horizontal">
            <Button
                x:Name="BackButton"
                Background="Transparent"
                Click="BackButton_Click"
                Style="StaticResource BackButtonStyle"
                Visibility="Collapsed" />
            <TextBlock
                x:Name="AppTitle"
                Height="x:Bind AppTitleBar.Height, Mode=OneWay"
                Padding="10,8"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                Style="StaticResource CaptionTextBlockStyle"
                Text="x:Bind appmodel:Package.Current.DisplayName"
                Visibility="Collapsed" />
        </StackPanel>
    </Grid>
    <Button
        x:Name="FakeTogglePaneButton"
        Grid.Row="1"
        Background="StaticResource MinimalTitleBarColor"
        Click="FakeTogglePaneButton_Click"
        Style="ThemeResource PaneToggleButtonStyle"
        Visibility="Collapsed" />
    <local:MediaControl
        x:Name="MainMediaControl"
        Grid.Row="2"
        Mode="Main" />
</Grid>

【问题讨论】:

【参考方案1】:

Page_Loaded 方法中,您已将AppTitleBar Grid 设置为应用的标题栏。那就是问题所在。您设置为应用标题栏的FrameworkElement 应该是无响应的,因为通常您通过拖动标题栏来移动应用窗口。

在响应部分下方放置RectangleBorder,并将RectangleBorder 设置为标题栏。

您可以查看this blog了解更多详情。

【讨论】:

谢谢!现在它是可点击的,但我仍然无法改变它的背景。有任何想法吗?代码已在 GitHub 中更新。 可能是因为您使用了BackButtonStyle。去掉这部分,你应该可以改变背景了。

以上是关于无法单击 UWP 自定义标题栏按钮的主要内容,如果未能解决你的问题,请参考以下文章

XCTestCase:无法在导航栏中按下自定义栏按钮

UWP-标题栏”后退“按钮

单击导航栏中的“返回”按钮时如何设置自定义视图控制器?

UWP-标题栏”后退“按钮

导航栏按钮单击事件在单击其下方区域时触发。

无法为自定义栏按钮设置标题?