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 :

Utilisation d'un TemplateBinding dans un LinearGradientBrush.GradientStops


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut Utilisation d'un TemplateBinding dans un LinearGradientBrush.GradientStops
    Bonjour.

    Y a t'il une subtilité pour pouvoir utiliser un propriété (du style Foreground) dans la définition des gradientstops ?

    Le code suivant ne léve pas d'erreur mais ne fonctionne pas (la couleur du Background "rouge" n'est pas prise en compte dans le dégradé) :
    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
     
    <Window x:Class="Window4"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window4" Height="300" Width="300">
        <Grid>
            <Grid.Resources>
                <Style TargetType="Button">
                    <!--Set to true to not get any properties from the themes.-->
                    <Setter Property="OverridesDefaultStyle" Value="True"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <Grid>
                                    <Rectangle>
                                        <Rectangle.Fill>
                                            <LinearGradientBrush x:Name="rr" StartPoint="0.5,0" EndPoint="0.5,1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
                                                <LinearGradientBrush.GradientStops>
                                                    <GradientStop Color="Black" Offset="0" />
                                                    <GradientStop Color="{TemplateBinding Background}" Offset="0.5" />
                                                    <GradientStop Color="DarkBlue" Offset="0.5" />
                                                    <GradientStop Color="LightBlue" Offset="1" />
                                                </LinearGradientBrush.GradientStops>
                                            </LinearGradientBrush>
                                        </Rectangle.Fill>
                                    </Rectangle>
                                    <ContentPresenter HorizontalAlignment="Center"
                                VerticalAlignment="Center"/>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Grid.Resources>
            <Button Margin="60,69,96,111" Name="Button1" Background="Red" Foreground="White">Button</Button>
        </Grid>
    </Window>
    Pour autant, celui-ci fonctionne :
    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
     
    <Window x:Class="Window4"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window4" Height="300" Width="300">
        <Grid>
            <Grid.Resources>
                <Style TargetType="Button">
                    <!--Set to true to not get any properties from the themes.-->
                    <Setter Property="OverridesDefaultStyle" Value="True"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <Grid>
                                    <Rectangle Fill="{TemplateBinding Background}">
                                    </Rectangle>
                                    <ContentPresenter HorizontalAlignment="Center"
                                VerticalAlignment="Center"/>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Grid.Resources>
            <Button Margin="60,69,96,111" Name="Button1" Background="Red" Foreground="White">Button</Button>
        </Grid>
    </Window>
    J'ai raté quelque chose ?

    Cdt.

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Re.

    Ca doit être lié à Color car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Grid.Triggers>
        <EventTrigger RoutedEvent= "Grid.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation
        Storyboard.TargetName="A"
        Storyboard.TargetProperty="Color"
                To="{TemplateBinding Background}" Duration="0:0:0" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>
    Ne marche pas non plus...

    Mais si on positionne To="Black", ça fonctionne ...

    Donc pour l'instant j'en suis à penser que le binding sur un type color ne marche pas (dans le code précédent, le rectangle.fill utilise un brush et pas une color...).

    Cdt.

  3. #3
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Re.

    Bon, j'ai trouvé ce que je cherchai ici :
    http://forums.microsoft.com/MSDN/Sho...36844&SiteID=1

    Pour autant, de color à GradientStop Color cela fonctionne, mais de brush à GradientStop Color, j'ai un erreur de conversion.

    Je laisse ouvert au cas où.

    Cdt.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Pour autant, de color à GradientStop Color cela fonctionne, mais de brush à GradientStop Color, j'ai un erreur de conversion.
    Tu as essayé d'utiliser un Converter pour convertir ton Brush en GradientStop/Color ?

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Bonjour.

    C'est un faux probléme en fait car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <GradientStop Color="{Binding Path=Background.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}" Offset="0.5" />
    Fonctionne idéalement.

    Par contre cette histoire de converter m'intéress Thomas, tu parles de faire une classe qui implémente IValueConverter ou est-ce possible directement dans le code xaml ?

    Cdt.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Non, je parle bien de passer par une classe implémentant IValueConverter et ensuite, de l'utiliser dans le XAML

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR] Utilisation de codes à barres dans crystal
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 29/06/2004, 08h48
  2. [servlet][formulaire] utilisation de 2 servlet dans 1 form
    Par luc_pichot dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2004, 17h55
  3. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39
  4. Utilisation de l'unicode dans un algo de cryptage
    Par Zazeglu dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 28/10/2003, 14h38
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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