Bonjour,

Voilà un extrait du fichier XAML de mon contrôle utilisateur :

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
 
<UserControl x:Class="SLight.TestUC"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Canvas x:Name="LayoutRoot">
     <Ellipse x:Name="Selector" 
                 Canvas.Top="128" Canvas.Left="128" Width="256" Height="256" 
                 StrokeThickness="3" Stroke="Yellow" 
                 Visibility="Collapsed" />
     <Ellipse x:Name="ZoneSelect" 
                 Canvas.Top="128" Canvas.Left="128" Width="256" Height="256" Opacity="0.5"
                 MouseEnter="ZoneSelect_MouseEnter" 
                 MouseLeave="ZoneSelect_MouseLeave">
            <Ellipse.Fill>
                <SolidColorBrush Color="Red" />
            </Ellipse.Fill>
        </Ellipse>
    </Canvas>
</UserControl>
et le code C# qui implémente les méthodes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
        void ZoneSelect_MouseEnter(object sender, MouseEventArgs e) {
            Selector.Visibility = Visibility.Visible;
        }
 
        void ZoneSelect_MouseLeave(object sender, MouseEventArgs e) {
                Selector.Visibility = Visibility.Collapsed;
        }
Rien de bien compliqué.

J'ai rajouté une méthode qui permet de redimensionner le contrôle lorsqu'on modifie sa taille :

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
 
// dans le constructeur
this.SizeChanged += new SizeChangedEventHandler(TestUC_SizeChanged);
 
// la méthode qui change la taille :
 
    void TestUC_SizeChanged(object sender, SizeChangedEventArgs e) {
            double width = e.NewSize.Width;
            ZoneSelect.Width = width / 2; ZoneSelect.Height = width / 2;
            ZoneSelect.SetValue(Canvas.TopProperty, width / 4);
            ZoneSelect.SetValue(Canvas.LeftProperty, width / 4);
            Selector.Width = width / 2; Selector.Height = width / 2;
            Selector.SetValue(Canvas.TopProperty, width / 4);
            Selector.SetValue(Canvas.LeftProperty, width / 4);
   }
Après plusieurs changements de taille lors de l'exécution de l'application Silverlight, la zone de réactivité n'est plus cohérente avec le contrôle (il faut passer la souris à côté du contrôle par exemple pour que MouseEnter / MouseLeave se déclenchent).

Une idée du soucis ?