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 :

Style sur des controles: FrameworkElement.Style a levé une exception [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    April 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : April 2012
    Messages : 26
    Points : 49
    Points
    49
    Par défaut Style sur des controles: FrameworkElement.Style a levé une exception
    Bonjour,

    J'ai définit un style de bouton dans un ResourceDictionary, et je cherche a l'appliquer sur plusieurs boutons.

    Voici mon style en court:

    Code xaml : 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
     
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     
        <Style x:Key="LightButton" TargetType="{x:Type Button}">
            .
            .
            .
            <Setter Property="Content">
                <Setter.Value>
                    <Image Source="{DynamicResource ResourceKey=ImgSrc}"
                           Height="{DynamicResource ResourceKey=ImgH}"
                           Width="{DynamicResource ResourceKey=ImgW}"/>
                </Setter.Value>
            </Setter>
     
            <Setter Property="Template">
                <Setter.Value>
     
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="LightButtonBorder"
                                Background="Transparent"
                                BorderBrush="Black"
                                RenderTransformOrigin="0.5,0.5">
                            .
                            .
                            .
                        </Border>
                        <ControlTemplate.Triggers>
                            .
                            .
                            .
                        </ControlTemplate.Triggers>
     
                    </ControlTemplate>
     
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

    Et voila ma fenetre:
    Code xaml : 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
     
    <Window x:Class="WPFTest.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="478" Width="697" AllowsTransparency="True" WindowStyle="None" Background="#00000000" ResizeMode="CanMinimize">
     
        <Border CornerRadius="30" Background="#FF2E2E2E">
            <Grid>
     
                <Button Name="button1" Style="{DynamicResource LightButton}">
                    <Button.Resources>
                        <ImageSource x:Key="ImgSrc">/WPFTest;component/mini.png</ImageSource>
                        <Color x:Key="ShadowColor">Blue</Color>
                        <sys:Double x:Key="ImgH">16</sys:Double>
                        <sys:Double x:Key="ImgW">16</sys:Double>
                    </Button.Resources>
                </Button>
     
                <Button Name="button2" Style="{DynamicResource LightButton}">
                    <Button.Resources>
                        <ImageSource x:Key="ImgSrc">/WPFTest;component/close.png</ImageSource>
                        <Color x:Key="ShadowColor">Blue</Color>
                        <sys:Double x:Key="ImgH">16</sys:Double>
                        <sys:Double x:Key="ImgW">16</sys:Double>
                    </Button.Resources>
                </Button>
     
            </Grid>
        </Border>
    </Window>

    Alors avec un seul bouton, tout marche parfaitement. Même avec 2, lorsque des propriétés sont redéfinies.
    Mais lorsque je veux avoir deux boutons avec le style de base, à l'éxécution, j'ai cette exception qui est levée:

    'La propriété Set 'System.Windows.FrameworkElement.Style' a levé une exception.'
    InnerException: L'élément spécifié est déjà l'enfant logique d'un autre élément. Déconnectez-le d'abord.
    Alors en googlant, j'ai cru comprendre que ça venait du fait que mon style était "appliqué" deux fois: lors du <Style x:Key="LightButton" TargetType="{x:Type Button}"> et lors du <Button Style="{DynamicResource LightButton}"> et qu'il fallait:
    • Soit que je n'utilise pas le TargetType dans le style (ce qui n'est pas possible,car j'ai des setters et des triggers qui se rapportent directement aux propriétés d'un bouton)

    • Soit que je n'appelle pas le style avec Style="{DynamicResource LightButton}", mais lorsque je fait ça, mon style n'est appliqué nul part :/
      De plus, si je n'ai qu'un bouton, ou si des propriétés sont redéfinies sur mon 2ème bouton, tout marche nickel ...



    Du coup je ne sais pas trop quoi faire, et comme je débute en WPF et que j'expérimente, je n'arrive vraiment pas à situer le problème, ou ce qu'il faudrait faire pour y remédier

    Merci pout toute l'aide que vous pourrez m'apporter

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    April 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : April 2012
    Messages : 26
    Points : 49
    Points
    49
    Par défaut
    Bin j'ai finis par trouver d'où venait le problème:

    C'est apparement le <Setter Property="Content"> dans mon code qui n'est pas valide, ou du moins qui ne devrait pas être utilisé comme çà...
    Pour des raisons que j'ignore, le fait d'utiliser plus de un bouton déclaré de cette manière lève une exception...

    En enlevant le <Setter>, et en mettant l'image dans le <Border> du <ControlTemplate>, c'est bon!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2008, 14h11
  2. Comment forcer à redessiner des controls au style XP ?
    Par Miles Raymond dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/05/2008, 11h29
  3. Réponses: 6
    Dernier message: 18/04/2005, 22h12
  4. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 16h51
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29

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