【发布时间】:2013-12-25 18:29:08
【问题描述】:
遵循当前的设计理念,我希望能够创建可以应用任何手机强调色的扁平按钮样式。从本质上讲,我希望它看起来有点像一个平铺主题和一个图标作为按钮的内容。我怎么能做到这一点?我不需要在我的应用程序中使用 HubTile 或任何类型的辅助磁贴,这只是用作以这种方式设置主题的按钮。它只会将用户导航到应用程序的另一部分。我不确定如何更改按钮控件的默认样式模板来创建这样的效果?我的最终结果是在屏幕底部有四个这样的风格化按钮,每个按钮都有一个不同的图标作为内容,用户可以直观地了解按钮的点击事件将执行的操作。
编辑
玻璃按钮样式,我想修改为扁平按钮样式
<Style x:Key="GlassButton" TargetType="Button">
<Setter Property="Background" Value="#FF1F3B53"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
<GradientStop Color="#FF718597" Offset="0.375"/>
<GradientStop Color="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualState x:Name="Normal"/>
<vsm:VisualState x:Name="MouseOver">
</vsm:VisualState>
<vsm:VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="glow"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.1000000"
Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".55"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused"/>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Border BorderBrush="#FFFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
<Border x:Name="border" Background="#7F000000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.507*"/>
<RowDefinition Height="0.493*"/>
</Grid.RowDefinitions>
<Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4">
<Border.Background>
<RadialGradientBrush>
<RadialGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform ScaleX="1.702" ScaleY="2.243"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="-0.368" Y="-0.152"/>
</TransformGroup>
</RadialGradientBrush.RelativeTransform>
<GradientStop Color="#B28DBDFF" Offset="0"/>
<GradientStop Color="#008DBDFF" Offset="1"/>
</RadialGradientBrush>
</Border.Background>
</Border>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="2"/>
<Border HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0">
<Border.Background>
<LinearGradientBrush EndPoint="0.494,0.889" StartPoint="0.494,0.028">
<GradientStop Color="#99FFFFFF" Offset="0"/>
<GradientStop Color="#33FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
</Border>
</Grid>
</Border>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我尝试将样式底部的 shine 边框修改为单一颜色(最好是深色(可能不透明度为 0.7)灰色,可以很好地匹配深色主题),但我仍然看到效果玻璃按钮样式,即按钮的上半部分比底部轻。我相信我可以管理其他我想做的更改,例如删除按钮样式的角半径,以便按钮是方形的并且也是按钮周围的边框。无论哪种方式,任何建议、提示或建议都会有很大帮助!
【问题讨论】:
-
它必须是一个按钮的任何特殊原因,为什么不只是一个带有图像的边框,对点击事件做出反应,瞧......?从 Windows Phone 工具包添加倾斜效果以获得完整的 Windows Phone 体验? :)
-
这很好。我的主要原因是在选择按钮时使用我从现有的“玻璃”按钮中为“平面”按钮选择的样式。这样的东西可以在边界上使用吗?我已经添加了上面的样式(与您刚刚评论的我的另一个问题相同)。我宁愿摆脱“玻璃”效果,而只使用平面、方形、按钮(或边框)来更好地匹配标准 Windows Phone 设计。
-
看我的回答,希望对你有帮助
标签: windows-phone-7 button windows-phone-8 styles