Я создаю пользовательский элемент управления WPF, который должен проверять, не пересекаются ли новые UIElement с существующими UIElements. Приведенный ниже код отлично работает, когда baseRectangle добавляется на холст перед вызовом button1_Click, но если прямоугольник добавляется в методе button1_Click, проверка попадания не работает.
<Window x:Class="WpfCollisionTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Canvas Height="246" HorizontalAlignment="Left" Margin="12,12,0,0" Name="canvas1" VerticalAlignment="Top" Width="479"></Canvas>
<Button Content="Button" Height="35" HorizontalAlignment="Left" Margin="12,264,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
</Window>
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
canvas1.Children.Clear();
Rectangle rect = new Rectangle();
rect.Width = 200;
rect.Height = 200;
rect.Fill = Brushes.Red;
canvas1.Children.Add(rect);
if (VisualTreeHelper.HitTest(canvas1, new Point(100, 100)) != null)
{
MessageBox.Show("Collision");
}
}
Render
. - person Rachel   schedule 30.01.2012canvas1.UpdateLayout();
непосредственно перед кодом проверки попадания. Это просто предположение. - person Clemens   schedule 30.01.2012