在UWP中调整CommandBar的内容

时间:2016-08-24 14:44:03

标签: uwp-xaml

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

1 个答案:

答案 0 :(得分:10)

解决方案

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

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

Centered content in CommandBar

问题原因

使用Anniversary Update SDK(Windows 10版本1607),CommandBar控件中添加了一个新属性 - IsDynamicOverflowEnabled。默认情况下,此属性设置为true,其目的是自动溢出应用栏命令,从条形区域的主要区域到辅助区域。

但是,此添加需要更改控件的默认模板。如果您在CommandBar中查看默认的C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.14393.0\Generic\generic.xaml模板,您会看到该模板包含新的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,这意味着内容将填充所有可用空间主要命令。但是,这种行为对于动态溢出没有意义,因为这需要命令在溢出之前占用尽可能多的空间。因此,VisualState DynamicOverflowEnabled会适当地切换列宽。