Различные стили Windows XP меняют внешний вид моего управления, как мне этого избежать? - PullRequest
2 голосов
/ 03 сентября 2010

Я думал, что все выглядит хорошо с моими пользовательскими элементами управления, стилями, макетом и т. Д., Пока я не выпустил версию для тестирования. Они спросили, может ли кнопка переключения быть зеленой при проверке. Я сказал, что это так, но это не так. Я проверил на своей машине, и она была зеленой. Оказывается, у него другой стиль Windows XP, чем у меня. То есть у него «классический стиль Windows».

Как мне избежать этого и применять мои стили независимо от стиля Windows?

<UserControl.Resources>
    <Style x:Key="MyToggStyle" TargetType="{x:Type ToggleButton}">
        <Setter Property="Content" Value="On" />
        <Setter Property="IsChecked" Value="True" />
        <Setter Property="Background" Value="Green" />
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="False">
                <Setter Property="Content" Value="Pff" />
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
    <ToggleButton FontWeight="Bold" 
                  IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"
                  Style="{StaticResource MyToggStyle}"/>
</Grid>

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Вы должны полностью переопределить шаблон элемента управления, потому что Chrome по умолчанию использует настройки ОС.

Это гораздо проще сделать в Expression Blend, чем в Visual Studio.

Вотупрощенная версия шаблона по умолчанию для ToggleButton:

<Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Background" Value="White"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderDefaulted="{TemplateBinding Button.IsDefaulted}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/>
                        </Microsoft_Windows_Themes:ButtonChrome>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="#ADADAD"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Обратите внимание, что элемент управления использует Microsoft_Windows_Themes:ButtonChrome.Если вы избавитесь от этого хрома или замените его, отображение ваших пользователей должно совпадать с вашим собственным (не удаляйте, однако, ContentPresenter - это то, куда идет текст / содержимое кнопки).Если вы просто удалите его, у вас будет плоская кнопка.Для него вы можете создавать визуальные состояния и анимацию, но, опять же, это гораздо проще в Blend.

Примечание: пространство имен с псевдонимом Microsoft_Windows_Themes в этом случае xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

1 голос
/ 03 сентября 2010

Использование сторонних элементов управления пользовательским интерфейсом поможет вам сохранить последовательность.

Я сделал это с помощью DevExpress элементов управления.У них есть очень приятная функция скининга.

Мне лично не нравятся приложения, которые не соответствуют настройкам внешнего вида ОС.

Не забывайте, что использование стандартных элементов управления .NET UI позволитвоспользоваться новыми возможностями ОС.В качестве иллюстрации попробуйте приложение со стандартным элементом управления ProgressBar в Windows XP, Windows Vista и Windows 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...