[WPF] UserControl et gestion du focus [Résolu]

BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention - 5 oct. 2009 à 14:32 - Dernière réponse : BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention
- 7 oct. 2009 à 09:17
Hello,
Encore moi et mes UserControls
Dans mon appli, j'aimerais pouvoir donner le focus à des UserControls, c'est-à-dire faire apparaître un rectangle de focus par exemple. Pour ce faire, dans mon UserControl, j'ai un rectangle que je voudrais rendre visible quand l'objet "a le focus". J'ai donc rajouté un style avec un trigger sur la propriété "IsFocused" (cf. code ci-dessous). A la compilation, Visual me dit qu'il ne peut pas résoudre la propriété "Visibility".

    
        <Style>
            <Style.Triggers>
                <Trigger Property="UserControl.IsFocused" Value="True">
                    <Setter Property="UserControl.theFocus.Visibility" Value="Visible"/>
                </Trigger>
            </Style.Triggers>
        </Style>        
    

    <Canvas x:Name="LayoutRoot">
        <Canvas x:Name="theFocus" Visibility="Hidden"  Width="591" Height="494">
        ...
        </Canvas>
        ...
    </Canvas>



Quelqu'un peut-il m'aider à résoudre mon erreur?

D'avance merci,
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention - 6 oct. 2009 à 16:14
3
Merci
Bon, on m'a soufflé une solution dans l'oreille: passer par un CustomControl plutôt que par un UserControl:
    <Style TargetType="{x:Type ui:Category}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ui:Category}">
                    <Canvas x:Name="LayoutRoot">
                        <Canvas x:Name="theFocus" Visibility="Hidden" Width="560" Height="460">
                        ...
                        </Canvas>
                    </Canvas>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Trigger.Setters>
                                <Setter TargetName="theFocus" Property="Visibility" Value="Visible"/>
                            </Trigger.Setters>
                        </Trigger>
                    </ControlTemplate.Triggers>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Et effectivement, ça marche mieux.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

Merci BunoCS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de BunoCS
cs_Kite37 243 Messages postés lundi 6 mars 2006Date d'inscription 17 janvier 2018 Dernière intervention - 6 oct. 2009 à 17:00
0
Merci
un custom control? un control template plutot non?

Car d'après le peu que je vois ici il s'agit toujours a mes yeux d'un user control


Cordialement,

KiTe

-----------------------
Ce qui nous tue pas nous rend plus fort,
Mais ce qui nous tue nous rend plus mort.
Commenter la réponse de cs_Kite37
BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention - 6 oct. 2009 à 17:06
0
Merci
Non, non, c'est bien un CustomControl.
Quand tu ajoutes un nouvel item dans ton projet, tu choisis "CustomControl". Visual te crée alors un CustomControl1.cs + un répertoire "thème" dans lequel tu trouve un generic.xaml qui est en fait un ResourceDictionary. Le code que j'ai collé est issu de ce fichier generic.xaml.

Bien sûr, si tu peux résoudre mon souci avec le UserControl, je suis preneur...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
cs_Kite37 243 Messages postés lundi 6 mars 2006Date d'inscription 17 janvier 2018 Dernière intervention - 6 oct. 2009 à 19:17
0
Merci
ah ok ça explique alors.

Je n'ai jamais saisi la différence fondamentale entre usercontrol et customcontrol, c'est surement pour ça ^^


Ce qui nous tue pas nous rend plus fort,
Mais ce qui nous tue nous rend plus mort.
Commenter la réponse de cs_Kite37
cs_Kite37 243 Messages postés lundi 6 mars 2006Date d'inscription 17 janvier 2018 Dernière intervention - 6 oct. 2009 à 19:19
0
Merci
Sinon pour ton problème, voir si avec un control rectangle ou border ce n'est pas possible.
Tu fais un setter sur la property adéquate (visibility, background suivant ce que tu veut comme résultat) avec un trigger sur le routed event MouseOver (qui peut être un peu assimilé a un focus).

Bizarre ceci dit qu'un trigger sur isfocused ne passe pas.


Ce qui nous tue pas nous rend plus fort,
Mais ce qui nous tue nous rend plus mort.
Commenter la réponse de cs_Kite37
BunoCS 13997 Messages postés lundi 11 juillet 2005Date d'inscription 17 août 2018 Dernière intervention - 7 oct. 2009 à 09:17
0
Merci
Kite,
Apparemment, un UserControl n'est pas prévu pour utiliser le système de templating

If built correctly, a UserControl can take advantage of the benefits of rich content, styles, and triggers. However, if your control inherits from UserControl, people who use your control will not be able to use a DataTemplate or ControlTemplate to customize its appearance. It is necessary to derive from the Control class or one of its derived classes (other than UserControl) to create a custom control that supports templates.

Source: MSDN - Control Authoring Overview

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.