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 :

Exception sur interception de l'evenement keydown dans un listviewitem


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut Exception sur interception de l'evenement keydown dans un listviewitem
    Bonjour,
    aujourd'hui je fais face à un problème curieux.

    j'ai une listview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <ListView DockPanel.Dock="Left"  x:Name="t_concepteur" ItemContainerStyleSelector="{StaticResource ListViewItemStyleSelector}"/>
    ListViewItemStyleSelector n'applique pour le moment que un seul style, celui qui suit (voir en gras l'event KeyDown) :

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
       <Style x:Key="ListviewItemStyle_1" TargetType="ListViewItem">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="Padding" Value="4,1"/>
            <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
            <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualStyle_1}"/>
            <Setter Property="Visibility" Value="{Binding Path=visibilite}"/>
            <Setter Property="AllowDrop" Value="True"/>
            <EventSetter Event="Mouse.PreviewMouseDown" Handler="listviewitem_mousedown"/>
            <EventSetter Event="Mouse.PreviewMouseUp" Handler="listviewitem_mouseup"/>
            <EventSetter Event="DragOver" Handler="listviewitem_DragOver"/>
            <EventSetter Event="Drop" Handler="listviewitem_Drop"/>
            <EventSetter Event="KeyDown" Handler="listviewitem_KeyDown" />
            
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Border  x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                            <Grid >
                                
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="18" />
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                        <Border Grid.Row="0" x:Name="row0" BorderBrush="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="5">          
                               <Grid>
                               <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" MaxWidth="20"/>
                                    <ColumnDefinition Width="20"  MaxWidth="20"/>
                                    <ColumnDefinition Width="{Binding Path=profondeur, Converter={StaticResource profondeurmargetreeviewitem}}" MaxWidth="{Binding Path=profondeur, Converter={StaticResource profondeurmargetreeviewitem}}"/>
                                    <ColumnDefinition Width="20"   MaxWidth="20"/>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <TextBlock x:Name="rang" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Text="{Binding Path=rang}" Style="{StaticResource labelstyle2}"/>
                                        <ToggleButton   x:Name="HeadExpander" Content="{Binding Path=type, Converter={StaticResource EnteteHierarchique}}" Style="{StaticResource  AnimatedExpanderButtonTemp}" Grid.Column="4" Grid.Row="0" HorizontalAlignment="Left"/>
                                        <ToggleButton Grid.Column="3" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"  SnapsToDevicePixels="True" x:Name="Expander" Style="{StaticResource TreeviewTogglePlusMoins}" IsChecked="{Binding Path=IsExpand}" ClickMode="Press" />
                                <TextBox x:Name="textboxref" Text="{Binding Path=lib_court}" Style="{StaticResource TextBoxStyle2}"  Grid.Column="5" Grid.Row="0"  HorizontalAlignment="Stretch"/>
                               
     
                                
                            </Grid>                    
                        </Border>
    
                        <ControlTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="row0" Value="{StaticResource Item.MouseOver.Background}"/>
                                <Setter Property="BorderBrush" TargetName="row0" Value="{StaticResource Item.MouseOver.Border}"/>
                                <Setter  Property="Background" TargetName="textboxref" Value="{StaticResource Item.MouseOver.Background}"/>
                            </MultiTrigger>
                            
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                    <Condition Property="IsSelected" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="row0" Value="{StaticResource Item.SelectedInactive.Background}"/>
                                <Setter Property="BorderBrush" TargetName="row0" Value="{StaticResource Item.SelectedInactive.Border}"/>
                                <Setter Property="Background" TargetName="textboxref" Value="{StaticResource Item.SelectedInactive.Background}"/>
                            </MultiTrigger>
                            
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="Selector.IsSelectionActive" Value="True"/>
                                    <Condition Property="IsSelected" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="row0" Value="{StaticResource Item.SelectedActive.Background}"/>
                                <Setter Property="BorderBrush" TargetName="row0" Value="{StaticResource Item.SelectedActive.Border}"/>
                                <Setter Property="Background" TargetName="textboxref" Value="{StaticResource Item.SelectedActive.Background}"/>
                            </MultiTrigger>
                            
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="TextElement.Foreground" TargetName="row0" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                            
                            <Trigger SourceName="HeadExpander" Property="IsChecked" Value="True">
                                <Trigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ExpanderContent"
                                                     Storyboard.TargetProperty="(ContentPresenter.LayoutTransform).(ScaleTransform.ScaleY)"                                                 
                                                     To="1"
                                                     Duration="0:0:0.4"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.EnterActions>
                                <Trigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ExpanderContent"
                                                     Storyboard.TargetProperty="(ContentPresenter.LayoutTransform).(ScaleTransform.ScaleY)"
                                                     To="0"
                                                     Duration="0:0:0.4"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.ExitActions>
                            </Trigger>
                           
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    le gestionnaire d'évènement est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Private Sub listviewitem_KeyDown(sender As Object, e As KeyEventArgs)
            MsgBox("hello")
        End Sub
    Al'exécution lorsque j'appui sur une touche j'obtiens bien le "hello", mais juste après avoir fermé la boite de dialogue l'exception suivante se produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TargetType 'ListViewItem' ne correspond pas au type de l'élément 'Control'
    Nom : exception.PNG
Affichages : 144
Taille : 57,8 Ko

    Lorsque je désactive le style ça marche sans problème. J'imagine qu'il y'a quelque chose qui cloche dans la définition du style ListviewItemStyle_1
    Toute aide est la bienvenue, merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 004
    Points : 5 423
    Points
    5 423
    Par défaut
    Est-ce que sans un messsagebox ca fait egalement ce probleme? Genre tu remplaces par un Console.Write.
    Si oui, je pense à un problème qui va survenir dans le changement d'état lié à la perte de focus/deselection lorsque la messagebox apparait. Donc il faut dans ce cas tester tes triggers en les rajoutant un par un.

  3. #3
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut
    Merci pour l'idée. j'ai désactivé tout le contenu du Template de ma listviewitem et j'ai réactivé les éléments un par un. J'ai ainsi trouvé le coupable. Il s'agit de la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualStyle_1}"/>
    où FocusVisualStyle_1 est défini par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        <Style x:Key="FocusVisualStyle_1" TargetType="{x:Type ListViewItem}">
            <Setter Property="BorderBrush" Value="Red"/>
        </Style>
    Ce style n'est pas indispensable pour mon code, je vais donc l'enlever, mais j'aimerai comprendre pourquoi ça pose problème.

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

Discussions similaires

  1. Evenement KeyDown sur Panel
    Par JLuc01 dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/12/2013, 00h33
  2. Réponses: 4
    Dernier message: 17/10/2013, 11h27
  3. Evenement KeyDown sur une ComboBox
    Par methos99 dans le forum Flex
    Réponses: 2
    Dernier message: 23/04/2009, 10h42
  4. Exception sur génération d'objet dans SELECT
    Par Arnard dans le forum Linq
    Réponses: 4
    Dernier message: 04/11/2008, 10h42
  5. [C#] Evenement click dans un Panel
    Par keyser-soze dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 23h21

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