为什么我的 AppBarButton(s) 从 TextBlock 样式继承边距?
Why are my AppBarButton(s) inheriting margin from a TextBlock style?
我正在开发一个 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" />
使用此代码后,按钮的图标会被剪裁:
当该行被注释掉时,我会得到像这样看起来正常的图标:
我试过为 CommandBar 和 AppBarButton 设置 Style={x:Null}
,我也试过为两者设置 Margin=0
,但都没有解决问题。我不明白为什么以 TextBlock 为目标的样式会导致图标在 AppBarButton 中剪辑。我不能只注释掉样式的 setter,因为 TextBlocks 实际上需要它,所以如果有人有不涉及删除 setter 的解决方案,我将非常感激。
所以原因是,因为图标实际上只是 glyph's from the SymbolIcon class,它使用 Segoe MDL2 Assets font 并呈现为 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>
希望这对您有所帮助,干杯。
我正在开发一个 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" />
使用此代码后,按钮的图标会被剪裁:
当该行被注释掉时,我会得到像这样看起来正常的图标:
我试过为 CommandBar 和 AppBarButton 设置 Style={x:Null}
,我也试过为两者设置 Margin=0
,但都没有解决问题。我不明白为什么以 TextBlock 为目标的样式会导致图标在 AppBarButton 中剪辑。我不能只注释掉样式的 setter,因为 TextBlocks 实际上需要它,所以如果有人有不涉及删除 setter 的解决方案,我将非常感激。
所以原因是,因为图标实际上只是 glyph's from the SymbolIcon class,它使用 Segoe MDL2 Assets font 并呈现为 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>
希望这对您有所帮助,干杯。