Bonjour,
Voilà un extrait du fichier XAML de mon contrôle utilisateur :
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
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>
Rien de bien compliqué.
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; }
J'ai rajouté une méthode qui permet de redimensionner le contrôle lorsqu'on modifie sa taille :
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).
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); }
Une idée du soucis ?
Partager