【发布时间】:2018-06-25 17:04:24
【问题描述】:
我想为我的 UWP 按钮制作自定义样式。所以我从 MSDN 复制了 button style template,然后仅修改了 "PointerOver" Visual State 以确保我掌握了它的要点。
以下是我目前所拥有的 sn-p。它位于一个名为 CustomButtonStyleTemplate.xaml 的单独文件中,在我的主 xaml 文件中,我使用 <ResourceDictionary.MergedDictionaries/> 导入了它。
<Style TargetType="Button" x:Key="SpecialButton">
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="ButtonGrid" Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<Storyboard>
<PointerUpThemeAnimation Storyboard.TargetName="ButtonGrid" />
</Storyboard>
</VisualState>
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Property="ButtonGrid.Opacity" Value="0.5"/>
</VisualState.Setters>
</VisualState>
.
.
.
不幸的是,我的自定义 <Setter/> 正在生成以下错误:The XAML Binary Format (XBF) generator reported syntax error。
每当我在网上查找类似代码时,大多数人都会将<Setter/> 的Property 字段设置为MyButton.Opacity,其中一些<Button/> 元素具有x:Name="MyButton"。
问题是,我希望将这种样式应用于 许多 我将明确选择的按钮,因此我将 x:Key="SpecialButton" 指定为 <Style/>。
我想既然<Grid/> 有x:Name="ButtonGrid",我应该使用ButtonGrid.Opacity 但显然我错了。我应该注意到ButtonGrid.(UIElement.Opacity) 也不起作用。
那么我一般应该如何引用此样式适用于哪个按钮的Opacity 属性?
【问题讨论】:
-
试试这个:
<Setter Target="ButtonGrid.Opacity" Value="0.5"/> -
@MDMuziburRahman 的建议是正确的。请注意,如果您将 Grid 的名称更改为“ButtonGrid”,您还需要将该样式中的所有“RootGrid”更改为“ButtonGrid”。因为在这种风格中,“RootGrid”用于其他视觉状态。触发其他视觉状态时会引发异常。
-
@MDMuziburRahman 你可以就这个案子做出回答。
标签: xaml uwp win-universal-app uwp-xaml