Ich habe einige benutzerdefinierte A-Panels auf einer Leinwand, wo es auch ein B-Panels, wie kann ich zählen A Panels tatsächlich den Mauszeiger?Count Controls von Typ A unter der Maus in WPF
Ich weiß, dass dies mit VisualTreeHelper.HitTest
erreicht werden konnte, aber nicht viel Gelegenheit haben, gibt es immer die Elemente auf den benutzerdefinierten Panels oder gar nichts ...
dies mein Code
<UserControl x:Class="WpfApplication7.UserControl1">
<Grid>
<Label Content="Label" Height="44" HorizontalAlignment="Left" Name="label1" VerticalAlignment="Top" FontSize="20" FontWeight="Bold" Width="78" Background="#FF4B9FC4" BorderBrush="#FF020A0D" BorderThickness="1" />
</Grid>
</UserControl>
<Window x:Class="WpfApplication7.MainWindow"
PreviewMouseLeftButtonDown="Window_PreviewMouseLeftButtonDown" xmlns:my="clr-namespace:WpfApplication7">
<Grid>
<my:UserControl1 HorizontalAlignment="Left" Margin="82,88,0,0" x:Name="userControl11" VerticalAlignment="Top" />
<my:UserControl1 HorizontalAlignment="Left" Margin="168,166,0,0" x:Name="userControl12" VerticalAlignment="Top" />
<my:UserControl1 HorizontalAlignment="Left" Margin="231,130,0,0" x:Name="userControl13" VerticalAlignment="Top" />
</Grid>
</Window>
CS-
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
List<UserControl1> ucs = new List<UserControl1>();
private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
GetUcsCount(e);
Console.WriteLine("ucs.Count = {0}", ucs.Count);
}
private void GetUcsCount(MouseButtonEventArgs e)
{
ucs.Clear();
Point p = e.GetPosition(this);
VisualTreeHelper.HitTest(this, null,
new HitTestResultCallback(MyHitTestCallback),
new PointHitTestParameters(p));
}
HitTestResultBehavior MyHitTestCallback(HitTestResult result)
{
if (result.VisualHit.GetType() == typeof(UserControl1))
{
ucs.Add(result.VisualHit as UserControl1);
}
return HitTestResultBehavior.Continue;
}
}
die result == 0
auf eine beliebige Stelle I ...
danke, observerd ich das auch, aber jetzt gibt es zu viele Elemente zurück :(nicht nur unter der Maus – serhio
@serhio: Ich kann keine Situation finden, wo ich ein Element in der FilterCallback, die nicht unter der Maus ist. Wann ist das passiert? –
@Meleak: Ich verstand, warum myusercontrol transparent war, aber groß, und nur childs Elemente waren wirklich sichtbar .. jetzt suche ich nach einer Methode, die die UserControls nach dem Treffer auf Kind nicht auf dem transparenten Teil zählt ... – serhio