2 votes

Les différents styles de Windows XP modifient l'apparence de mes contrôles, comment puis-je l'éviter ?

Je pensais que tout allait bien avec mes contrôles utilisateur, mes styles et ma mise en page, etc., jusqu'à ce que je publie une version à tester par l'utilisateur. Ils ont demandé si le bouton de basculement pouvait être vert lorsqu'il était coché. J'ai répondu que oui, mais que ce n'était pas le cas. J'ai vérifié sur ma machine et il était vert. Il s'avère qu'il a un style de Windows XP différent du mien. C'est-à-dire qu'il a le "style Windows Classic".

Comment éviter cela et appliquer mes styles indépendamment du style 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>

2voto

Jay Points 27907

Vous devez complètement remplacer le modèle de contrôle, car le chrome par défaut utilise les paramètres du système d'exploitation.

C'est beaucoup plus facile à faire dans Expression Blend que dans Visual Studio.

Voici une version simplifiée du modèle par défaut pour une 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>

Remarquez que le contrôle utilise Microsoft_Windows_Themes:ButtonChrome . Si vous vous débarrassez de ce chrome ou le remplacez, l'affichage de vos utilisateurs devrait correspondre au vôtre (ne supprimez pas l'icône ContentPresenter Mais c'est là que se trouve le texte/contenu du bouton). Si vous le supprimez, vous obtiendrez un bouton plat. Vous pouvez créer des états visuels et des animations pour celui-ci, mais là encore, c'est beaucoup plus facile avec Blend.

Note : l'espace de nom aliasé par Microsoft_Windows_Themes dans ce cas, c'est xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

1voto

Utilisation de contrôles d'interface utilisateur tiers vous aidera à rester cohérent.

Je l'ai fait en utilisant DevExpress contrôles. Ils ont une fonction d'habillage qui est très agréable.

Je déteste personnellement les applications qui ne respectent pas les paramètres d'apparence de l'OS.

N'oubliez pas que l'utilisation de contrôles d'interface utilisateur standard .NET vous permettra de tirer parti des nouvelles fonctionnalités du système d'exploitation. À titre d'exemple, essayez une application avec le contrôle standard ProgressBar sous Windows XP, Windows Vista et Windows 7.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X