Problème avec les events MouseEnter, Leave
Bonjour,
Voilà un extrait du fichier XAML de mon contrôle utilisateur :
Code:
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:
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:
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 ?