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 :

WPF XAML DataTrigger ContentTemplate


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut WPF XAML DataTrigger ContentTemplate
    Bonjour,

    J'utilise un style de TargetType "ContentPresenter" avec des DataTriggers pour affecter dynamiquement un ContentTemplate.

    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
     
        <Style x:Key="styleContentValeur" TargetType="{x:Type ContentPresenter}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="chaine">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataChaine}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="chainemultiligne">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataChaineMultiligne}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="entier">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataEntier}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="reel">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataReel}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="booleen">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataBooleen}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="liste">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataListe}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="listedynamique">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataListe}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="date">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataDate}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding TAT_LIBELLE, Mode=OneWay}" Value="grammaire">
                    <Setter Property="ContentTemplate" Value="{StaticResource dataChaine}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    Les DataTemplates sont comme ceci :

    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
    48
    49
    50
    51
    52
    53
    54
    55
     
        <DataTemplate x:Key="dataChaine">
            <local:TextBoxPerso Style="{StaticResource styleTextBox}"
                                HorizontalContentAlignment="Left" VerticalContentAlignment="Center"
                                TextWrapping="NoWrap" AcceptsReturn="False" AcceptsTab="False"
                                oAttribut="{Binding}"
                                Text="{Binding ATT_VALEUR, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataChaineMultiligne">
            <local:TextBoxPerso  Margin="3" 
                                 Style="{StaticResource styleTextBox}"
                                 HorizontalContentAlignment="Left" VerticalContentAlignment="Top"
                                 TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="False"
                                 HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden"
                                 oAttribut="{Binding}"
                                 Text="{Binding ATT_VALEUR, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                 IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataEntier">
            <local:TextBoxPerso  Style="{StaticResource styleTextBox}"
                                 HorizontalContentAlignment="Left" VerticalContentAlignment="Center"
                                 TextWrapping="NoWrap" AcceptsReturn="False" AcceptsTab="False"
                                 oAttribut="{Binding}"
                                 Text="{Binding ATT_VALEUR, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                 IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataReel">
            <local:TextBoxPerso  Style="{StaticResource styleTextBox}"
                                 HorizontalContentAlignment="Right" VerticalContentAlignment="Center"
                                 TextWrapping="NoWrap" AcceptsReturn="False" AcceptsTab="False"
                                 oAttribut="{Binding}"
                                 Text="{Binding ATT_VALEUR, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                 IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataBooleen">
            <local:CheckBoxPerso FocusVisualStyle="{x:Null}" IsChecked="{Binding ATT_VALEUR, Converter={StaticResource StringToBoolConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                 IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataDate">
            <DatePicker IsTodayHighlighted="False" SelectedDate="{Binding ATT_VALEUR, Converter={StaticResource StringToDateTimeConverter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                        IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
     
        <DataTemplate x:Key="dataListe">
            <local:ComboBoxPerso IsEditable="True"
                                 ItemsSource="{Binding tValeur}" DisplayMemberPath="ALV_VALEUR" SelectedValuePath="ALV_ID"
                                 SelectedValue="{Binding ATT_VALEUR, Converter={StaticResource StringToIntConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                 IsEnabled="{Binding IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    Donc selon la valeur de TAT_LIBELLE, cela sélectionne le bon ContentTemplate.

    J'ai un soucis avec le DataTemplate : dataDate. La valeur de SelectedDate "ATT_VALEUR" correspond à une autre ligne de ma source qui à une valeur TAT_LIBELLE != "date".
    J'ai découvert cela car j'ai eu une exception dans le Converter : StringToDateTimeConverter.

    Comme est-ce possible ? Car normalement seulement les lignes de ma source ayant TAT_LIBELLE = "date" utilise ce ContentTemplate !?

    Je n'utilise pas la bonne méthode pour gérer dynamiquement mes ContentTemplate ?

    Merci.

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Solution trouvé sur un autre forum avec l'utilisation d'un ContentTemplateSelector.

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

Discussions similaires

  1. [WPF & XAML] Personnaliser control button
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 23/02/2010, 08h56
  2. [WPF / XAML] Propriété topmost = true mais fenetre en arriére plan
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 16/01/2008, 14h32
  3. Réponses: 3
    Dernier message: 16/01/2008, 11h45
  4. [WPF-XAML] freeBrowser 1.0 - Système de skin
    Par GeffD dans le forum Windows Presentation Foundation
    Réponses: 25
    Dernier message: 30/01/2007, 15h54

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