IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Problème de Width ou Height après application d'un ControlTemplate


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut Problème de Width ou Height après application d'un ControlTemplate
    Bonjour,

    J'ai un petit problème en essayant de personnaliser mes scrollbar de mon application. Je voulais pouvoir changer complétement leurs apparence notamment pour les ScrollViewer alors pour cela je pensais changer son ControlTemplate. Je me suis donc dirigé sur la documentation de msdn pour voir comment changer celui d'une scrollbar et je suis tombé donc sur ce lien:

    http://msdn.microsoft.com/fr-fr/library/ms742173.aspx

    J'ai donc essayé de reproduire la même chose avec succès à un détail près. Maintenant quand j'essais de définir la largeur ou hauteur (tout dépend si elle est horizontale ou verticale) des scrollbar cela ne change rien. Elle garde toujours la même taille. Voici déjà le code que j'ai pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <ControlTemplate x:Key="HorizontalScrollbarTemplate" TargetType="{x:Type ScrollBar}">
            <Border Background="{StaticResource HorizontalScrollbarBackgroundColor}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition MaxWidth="20"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition MaxWidth="20"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
     
                    <RepeatButton Grid.Column="0" Style="{StaticResource ScrollbarButtonStyle}"
                                  Command="ScrollBar.LineLeftCommand" Content="M 0,8 L 8,8 L 4,0 Z" />
                    <Track Name="PART_Track" Grid.Column="1">
                        <Track.DecreaseRepeatButton>
                            <RepeatButton Style="{StaticResource ScrollBarPageButtonStyle}" Command="ScrollBar.PageLeftCommand"/>
                        </Track.DecreaseRepeatButton>
                        <Track.Thumb>
                            <Thumb Style="{StaticResource ScrollbarSliderStyle}"></Thumb>
                        </Track.Thumb>
                        <Track.IncreaseRepeatButton>
                            <RepeatButton Style="{StaticResource ScrollBarPageButtonStyle}" Command="ScrollBar.PageRightCommand"/>
                        </Track.IncreaseRepeatButton>
                    </Track>
                    <RepeatButton Grid.Column="2" Style="{StaticResource ScrollbarButtonStyle}"
                                  Command="ScrollBar.LineRightCommand" Content="M 0,0 L 8,0 L 4,8 Z" />
                </Grid>
            </Border>
        </ControlTemplate>
    Et là voici les styles utilisés dans le ControlTemplate de la scrollbar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <Style x:Key="ScrollbarButtonStyle" TargetType="{x:Type RepeatButton}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="Focusable" Value="False" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                        <Border Background="{StaticResource ScrollButtonColor}" BorderThickness="0">
                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" 
                                  Fill="{StaticResource ScrollArrowColor}" 
                                  Data="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}"></Path>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
     
    <Style x:Key="ScrollBarPageButtonStyle" TargetType="{x:Type RepeatButton}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="IsTabStop" Value="false"/>
            <Setter Property="Focusable" Value="false"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                        <Border Background="Transparent" BorderThickness="0"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
     
    <Style x:Key="ScrollbarSliderStyle" TargetType="{x:Type Thumb}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="IsTabStop" Value="False" />
            <Setter Property="Focusable" Value="False" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Border CornerRadius="8"
                                Background="{StaticResource ScrollbarSliderColor}"
                                BorderBrush="{StaticResource GrayBorderColor}" BorderThickness="1"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    Et là le ControlTemplate de mon ScrollViewer où sont utilisé les scrollbar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <ControlTemplate x:Key="PlaylistScrollViewerTemplate" TargetType="{x:Type ScrollViewer}">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"></RowDefinition>
                    <RowDefinition Height="Auto"></RowDefinition>
                </Grid.RowDefinitions>
     
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
     
                <ScrollContentPresenter Grid.Column="0"/>
     
                <ScrollBar Grid.Column="1" Grid.Row="0" Orientation="Vertical"
                           Template="{StaticResource VerticalScrollbarTemplate}"
                           ViewportSize="{TemplateBinding ViewportHeight}"
                           Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
     
                <ScrollBar Grid.Column="0" Grid.Row="1" Orientation="Horizontal"
                           Template="{StaticResource HorizontalScrollbarTemplate}"
                           ViewportSize="{TemplateBinding ViewportWidth}"
                           Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
            </Grid>
        </ControlTemplate>
    La solution que j'ai trouvé pour vraiment définir la taille est de donner une largeur(ou hauteur) directement au Border dans le ControlTemplate de la scrollbar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ControlTemplate x:Key="VerticalScrollbarTemplate" TargetType="{x:Type ScrollBar}">
            <Border Background="{StaticResource VerticalScrollbarBackgroundColor}" Width="14">
             <!-- Reste du template-->
            </border>
    </ControlTemplate>
    Hors je trouve pas cela particulièrement pratique, surtout que l'exemple donné sur msdn pour définir la taille selon la valeur de la propriété orientation me conviendrait. Mais cela ne marche pas. Donc si quelqu'un a une idée du pourquoi du comment cela ne fonctionne, je le remercie grandement.

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Essaies d'utiliser {TemplateBinding Width} dans le ControlTemplate :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ControlTemplate x:Key="VerticalScrollbarTemplate" TargetType="{x:Type ScrollBar}">
            <Border Background="{StaticResource VerticalScrollbarBackgroundColor}" Width="{TemplateBinding Width}">
             <!-- Reste du template-->
            </border>
    </ControlTemplate>

Discussions similaires

  1. Problème d'accès aux ressources après export de mon application
    Par stevenfoox dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 05/09/2014, 13h23
  2. [CSS 2] Problème width et height
    Par bob633 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/02/2010, 14h12
  3. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40
  4. problème d'arrondi à 2 chiffres après virgule
    Par nerick dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 17h26
  5. Problème d'ouverture de fenetre apres saisie d'un formulaire
    Par marsupilami34 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/08/2005, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo