Стили на пуговицах с детьми

У меня вопрос по стилям. В моем универсальном приложении Windows у меня есть определенные кнопки. Эти кнопки имеют дочернюю панель стека, а дочерняя панель стека имеет изображение. Цель этого состоит в том, что кнопка должна содержать изображение.

Теперь мой работодатель хочет игнорировать настройки темы пользователя. Поэтому всякий раз, когда нажимается кнопка, он не хочет, чтобы цвет фона кнопки менялся. Единственный способ, который я нашел до сих пор, - это стиль. Однако, когда я использую стиль, кнопка отображается без дочерних элементов. Стиль, который я сделал, выглядит так:

<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>

person WereWolfBoy    schedule 19.08.2014    source источник


Ответы (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>
person Валера Галанин    schedule 21.08.2014
comment
Эй, спасибо. Я попробую это. Но это, вероятно, работает только для телефонной части проекта. Есть ли что-то подобное для современных приложений Windows? - person WereWolfBoy; 22.08.2014
comment
Ты прав. Это будет работать только для телефона. В приложениях магазина вы можете переопределить ресурс ButtonPressedBackgroundThemeBrush. Но это отличается для других элементов управления. Полный список ThemeResouces доступен здесь: msdn.microsoft.com/en-us /библиотека/dn518235.aspx - person Валера Галанин; 22.08.2014