有孩子的按钮上的样式

时间:2014-08-19 12:53:23

标签: button windows-8.1 windows-phone-8.1 children win-universal-app

我对样式有疑问。在我的Windows Universal应用程序中,我有一些按钮。这些按钮具有作为子项的堆栈面板,并且堆栈面板具有作为子项的图像。这样做的目的是按钮需要包含图像。

现在我的雇主想要忽略用户的主题设置。因此,无论何时单击按钮,他都不希望按钮的背景颜色发生变化。我到目前为止找到的唯一方法是使用一种风格。然而,当我使用一种风格时,按钮显示没有它的孩子。我制作的风格如下:

<Style x:Key="Button_style" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Pressed">
                                    </VisualState>
                                    <VisualState x:Name="Disabled"/>
                                    <VisualState x:Name="PointerOver">
                                    </VisualState>
                                    <VisualState x:Name="Pointerleave">
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused"/>
                                    <VisualState x:Name="PointerFocused"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

这是一个概念证明。然而,由于按钮的孩子消失了,我无法继续。我如何重写这种风格,让按钮的孩子保持原状?

以下是我所拥有的按钮的示例代码:

<Button Name="MyButton" Click="MyButton_Click" ClickMode="Press" HorizontalAlignment="Center" VerticalAlignment="Stretch" >  
    <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left" >
         <Image Name="MyImage" x:Uid="MyImage" Source="" VerticalAlignment="Top" HorizontalAlignment="Left" MaxWidth="30" />
     </StackPanel>
</Button>

1 个答案:

答案 0 :(得分:1)

如果你想忽略用户设置,那么最好的选择就是覆盖PhoneAccentBrush值。您可以在App.xaml中执行此操作,也可以使用ResourceDistionary。

  <Color x:Key="PhoneAccentColor">Blue</Color>

也可以在App.xaml中为您的应用程序请求浅色或深色主题:

  <Application x:Class="App1.App"
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
               xmlns:local="using:App2"
               RequestedTheme="Light">
  </Application>