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

VSTO .NET Discussion :

[Focus] Probleme sur des evenements ContexMenu lorsque le clic sort du volet


Sujet :

VSTO .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut [Focus] Probleme sur des evenements ContexMenu lorsque le clic sort du volet
    Bonjour,

    Je fais suite au thread que j'ai mis sur WPF:
    http://www.developpez.net/forums/d10...m-selectionne/

    Visiblement c'est un problème plus spécifique aux add in word donc je re-post ici (plus synthétique)


    J’ai un étrange « bug » qui est dû peut-être au fait que j’utilise un Add In :

    J’ai un Add In qui affiche un CustomTaskPanes. Dans ce volet, je mets un UserControl Winform (qui sert d’hébergeur, car il est ComVisible pour Word), dedans j’y mets mon UserControl WPF.
    Dans mon Treeview pour chaque Node, j’attache au clic droit un System.Windows.Controls.ContextMenu créé dynamiquement

    Lorsque le ContexMenu s’affiche, je peux cliquer sur un MenuItem auquel j’ai rattaché un évènement sur le Click.
    Lorsque ma souris reste dans le volet créé, les événements fonctionnent bien, lors que le MenuItem est situé en dehors du volet l’évènement est complètement inhibé !


    Pour reproduire mon problème je joins un code très simple (Visual Studio 2010 par contre / marche sous Office 2007 & 2010, F5 & rulez)


    Avec le projet ci-joint il est possible de reproduire le problème :

    C’est un projet add in word 2010, avec un UserControl WinForm qui contient un UserControl WPF, dans lequel il y a un bouton :
    Pour reproduire le bug il faut respecter ces étapes :
    - Clic gauche sur le bouton (pour lui donner le focus)
    - Clic droit pour afficher le menu contextuel
    - Si on clic sur un MenuItem en dehors du volet, alors il n’y a pas de message « OK !! » l’évènement est inhibé
    - Si on clic sur un MenuItem alors que la souris est présent dans le volet, alors l’évènement est actif, le MessageBox OK s’affiche

    Il est à noter que le phénomène ne se reproduit pas lorsqu’on utilise la touche Enter du clavier (peu importe où se trouve la souris l’évènement à toujours lieu au clavier)

    Voilà
    C’est un projet minimaliste qui permet de reproduire mon soucis

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut context menu ne reagit dans un add-in word,wpf
    bonjour alavoler,
    c'est un probleme d' "airspace" ,que tu as.
    cet "airspace" est ce que certains auteurs ont remarque quand on mixte des controles wpf dans winform ou des controles winform dans wpf.
    en gros :
    1/ controles wpf dans une appli winform ,le phenomene est le suivant :
    -tout controle wpf non hoste est affiche à l'arriere plan .
    Je pense à messagebox() qui refuse de s'afficher.il faut le remplace le peut etre un Winform modal Hoste perso(il devient friend avec winform) .
    2/ controles winform dans une appli wpf :
    -meme phenomene avec un winform hoste dans wpf
    voci un code exemple a coller dans une fenetre xam de cet etrange et amusant phenomene:
    -les winforms ont tendance à se mettre à l'avant plan malgre leurs z-order:

    Ici code d'une fenetre wpf avec un winhost qui cache tout et à executer(le phenome se constate à l'execution)
    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
     
    Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
        Title="Window Avec Winhost" Height="300" Width="300">
        <Grid Height="273" Width="289">
            <!-- z-order = 0 plan=0 -->
            <Rectangle Height="100" Width="100" Fill="Red"  > </Rectangle>
            <!-- z-order = 1 par dessus rectangle  -->
            <TextBlock  Height="100" Width="100" FontSize="20">
                WPF<LineBreak />
                WPF<LineBreak />
                WPF
            </TextBlock>
            <!-- z-order = 2 par dessus texte block-->
            <WindowsFormsHost   Background="Bisque" Foreground="Black" Margin="89,81">
                <wf:Label Text="Windows Forms"  Width="100" Height="100" />
            </WindowsFormsHost>
            <!-- z-order = 3 par dessus winhost-->
            <Ellipse  Height="100" Width="100"  Stroke="Blue" StrokeThickness="4" Fill="Aquamarine"/>
            <!-- z-order = 4 pardessus tout-->
            <TextBlock FontSize="18" Background="Yellow" Foreground="blue" Margin="94.5,116,94.5,120">
                On Top
            </TextBlock>
     
     
        </Grid>
    </Window>
    Ici le code de la meme fenetre WPF sans le Winhost perturbateur qui s'affiche en respectant l'ordre de plan dans le rendu:
    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
     
    <Window x:Class="Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window2 Sans Winhost" Height="300" Width="300">
        <Grid Height="273" Width="289">
            <!-- z-order = 0 plan=0 -->
            <Rectangle Height="100" Width="100" Fill="Red"  ></Rectangle>
            <!-- z-order = 1 par dessus rectangle  -->
            <TextBlock  Height="100" Width="100" FontSize="20">
                WPF<LineBreak />
                WPF<LineBreak />
                WPF
            </TextBlock>
            <!-- z-order = 3 par dessus texte block-->
            <Ellipse  Height="100" Width="100"  Stroke="Blue" StrokeThickness="4" Fill="Aquamarine"/>
            <!-- z-order = 4 pardessus tout-->
            <TextBlock FontSize="18" Background="Yellow" Foreground="blue" Margin="94.5,116,94.5,120">
                On Top
            </TextBlock>
     
     
        </Grid>
    </Window>
    le winform est envahissant .
    Maintenant pour ton bug,c'est que lorsque tu es dans la zone de l'elementhost (zone de rendu de wpf) tout se passe bien,quand tu sors c'est patatras.
    Evite les menus contextextuels ,utilises des boutons ou des menus ancres.
    bonne soiree....

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/09/2011, 11h53
  2. probleme sur des pointeurs de pointeurs
    Par frboyer dans le forum Langage
    Réponses: 2
    Dernier message: 14/04/2010, 18h01
  3. service WCF avec opérations asynchrone basée sur des evenements
    Par Yogy dans le forum Windows Communication Foundation
    Réponses: 5
    Dernier message: 10/12/2009, 19h21
  4. FF/IE sur des evenement d'une nouvelle fenetre
    Par Delphy113 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/01/2007, 19h37
  5. 2 Problemes sur des Requete sur (heure & *)
    Par _stef_ffff_f34 dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/06/2006, 14h37

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