为什么我的AppBarButton继承了TextBlock样式的边距?

时间:2016-04-13 17:41:45

标签: xaml winrt-xaml

我正在开发一个Windows 8商店桌面应用程序,而我在BottomAppBar中的AppBarButton会遇到一个奇怪的问题。

这是我的BottomAppBar的代码,只是为了表明xaml中没有设置任何内容:

<Page.BottomAppBar>
        <CommandBar Background="SlateGray">
            <AppBarButton Label="UseGPS"
                          Icon="Target"/>
            <AppBarButton Label="Reset"
                          Icon="Clear"/>
            <AppBarButton Label="Save to File"
                          Icon="Save" />
            <AppBarSeparator />
            <AppBarButton Label="Copy Longitude"
                          Icon="Copy"/>
            <AppBarButton Label="Copy Latitude"
                          Icon="Copy" />
        </CommandBar>
    </Page.BottomAppBar>

真正的问题在于我的Generic.Xaml资源字典中的xaml代码:

<Style TargetType="TextBlock">
        <Setter Property="VerticalAlignment"
                Value="Center" />
        <Setter Property="FontFamily" 
                Value="Segoe UI" />
        <Setter Property="FontSize" 
                Value="26" />
        <Setter Property="Foreground" 
                Value="{StaticResource ApplicationForegroundThemeBrush}" />
        <Setter Property="Margin"
                Value="10,0" />
    </Style>

特别是这一行:<Setter Property="Margin" Value="10,0" />

使用此代码,按钮的图标会被剪切:

Clipped Icons

当该行被注释掉时,我会看到这样的正常图标:

Non Clipped Icons

我已经尝试为CommandBar和AppBarButton设置Style={x:Null},我也尝试过设置Margin=0,但都没有解决问题。我不明白为什么针对TextBlock的样式导致图标在AppBarButton中剪辑。我不能只注释掉样式的setter,因为TextBlocks实际上需要它,所以如果有人有一个不涉及删除setter的解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:1)

原因是,因为图标实际上仅来自使用Segoe MDL2资产字体glyph'sSymbolIcon class并呈现为 TextBlock 在运行时。因此从TargetType继承。

您可以轻松地在实例中关闭该继承,例如;

<CommandBar Background="SlateGray">
   <CommandBar.Resources>
      <Style TargetType="TextBlock">
         <Setter Property="Margin" Value="0"/>
      </Style>
   </CommandBar.Resources>
            <AppBarButton Label="UseGPS"
                          Icon="Target"/>
            <AppBarButton Label="Reset"
                          Icon="Clear"/>
            <AppBarButton Label="Save to File"
                          Icon="Save" />
            <AppBarSeparator />
            <AppBarButton Label="Copy Longitude"
                          Icon="Copy"/>
            <AppBarButton Label="Copy Latitude"
                          Icon="Copy" />
</CommandBar>

希望这会有所帮助,欢呼。