Мне нужно найти UIElement
s in (rectangle/area/bounds).Как я могу найти UIElements в прямоугольнике в WPF?
MainWindow Я делаю следующее:
- зарегистрировать мышь вниз, в исходное положение.
- Я регистрирую положение мыши вверх.
- Теперь мне нужно найти ll (кнопки, текстовые поля и т. Д.) В прямоугольнике между началом положение и конечное положение.
Я нашел в методе msdn HitTest
, но это только для одной точки. Я думаю, что, пройдя все точки в созданном прямоугольнике , это катастрофа производительности.
http://msdn.microsoft.com/en-us/library/ms752097.aspx
Мой код основан на MVVM схеме:
private ObservableCollection<UIElementViewModel> wells;
private Point stratPoint; // Mouse down
public ICommand MouseUpRightCommand
{
get
{
if (this.mouseUpRightCommand == null)
{
this.mouseUpRightCommand = new RelayCommands(
param =>
{
if (param is MouseButtonEventArgs)
{
var e = (param as MouseButtonEventArgs);
//Set the end point
endPosition = e.GetPosition(((ItemsControl)e.Source));
// for example, here I want to find all controls(UIElements) in the
// founded rectangle of stratPoint and endPosition.
}
});
}
return this.mouseUpRightCommand;
}
}
Любая другая идея или лучший подход?
Благодаря
Это звучит очень хорошо, я попробую сейчас поблагодарить. –
Привет, астральный, спасибо за ответ, он работает, но проблема в том, что этот подход повреждает шаблон MVVM: ObservableCollection Ячейки в представленииModel - это проблема FrameWorkElement - это представление. –
Вы правы. Но вы должны посмотреть здесь: [ссылка] (http://stackoverflow.com/questions/1083224/pushing-read-only-gui-properties-back-into-viewmodel) И может быть создано FramworkElementViewModel – astreal