在 UWP 中对齐 CommandBar 的内容

Aligning Content of CommandBar in UWP

如何将 CommandBar 的内容部分中的内容水平对齐?在周年更新之前,这仍然是可能的。

解决方案

禁用 IsDynamicOverflowEnabled 属性 并将 HorizontalContentAlignment 设置为 Right。执行此操作后,您将获得与周年更新前 SDK 版本相同的行为。

    <CommandBar HorizontalContentAlignment="Right"
                IsDynamicOverflowEnabled="False">
        <CommandBar.Content>
            <TextBlock Text="Content" />
        </CommandBar.Content>
    </CommandBar>

问题原因

通过周年更新 SDK(Windows 10 版本 1607),新的 属性 添加到 CommandBar 控件 - IsDynamicOverflowEnabled。此属性默认设置为true,其目的是自动溢出应用栏命令从栏上的主要区域到次要区域。

但是,此添加需要更改控件的默认模板。如果查看 C:\Program Files (x86)\Windows Kits\DesignTime\CommonConfiguration\Neutral\UAP.0.14393.0\Generic\generic.xamlCommandBar 模板的默认值,您会看到该模板包含一个新的 VisualStateGroup:

<VisualStateGroup x:Name="DynamicOverflowStates">
<VisualState x:Name="DynamicOverflowDisabled"/>
<VisualState x:Name="DynamicOverflowEnabled">
    <VisualState.Setters>
        <Setter Target="ContentControlColumnDefinition.Width" Value="Auto"/>
        <Setter Target="PrimaryItemsControlColumnDefinition.Width" Value="*"/>
    </VisualState.Setters>
</VisualState>

默认情况下,控件将 ContentControlColumnDefinition.Width 设置为 *,将 PrimaryItemsControlColumnDefinition.Width 设置为 Auto,这意味着内容将填充所有可用的 space 在输入主要命令后离开。然而,这种行为对于动态溢出没有意义,因为这要求命令在溢出之前尽可能多地使用 space 。因此,VisualState DynamicOverflowEnabled 适当地切换列宽。