Получение всего пользовательского элемента управления в моем событии mousedown
Привет,
У меня есть глупая проблема с щелчком по пользовательскому элементу управления (красная сетка с желтым прямоугольником в центре) на холсте.
Правка: код xaml всегда путается и усекается. Я не знаю, как правильно это опубликовать...
Пользовательский элемент управления:
код XAML:
<resourcedictionary> <controltemplate x:key="TESTCONTROL" targettype="{x:Type local:TestControl}"> <grid background="Red"> <rectangle width="50" height="50" verticalalignment="Center" horizontalalignment="Center" fill="Yellow"> <Setter Property="Template" Value="{StaticResource TESTCONTROL}"/>
Код:
public class TestControl : Control { }
Есть 2 разных случая, которые я сделал:
1) прямое добавление пользовательского элемента управления на холст:
код XAML:
<window> <canvas x:name="TestCanvas" mouseleftbuttondown="TestCanvas_MouseLeftButtonDown">
Код:
public partial class MyWindow : Window { public MainWindow() { InitializeComponent(); TestControl control = new TestControl(); control.Width = 100; control.Height = 100; TestCanvas.Children.Add(control); } }
2) Использование ItemsControl с холстом в качестве ItemPanel (ItemsSource + List)
код XAML:
<window> <itemscontrol x:name="TestItemsCtrl"> <itemscontrol.itemspanel> <itemspaneltemplate> <canvas mouseleftbuttondown="TestCanvas_MouseLeftButtonDown">
Код:
public partial class MyWindow : Window { public MainWindow() { InitializeComponent(); TestControl control = new TestControl(); List<testcontrol> controlList = new List<testcontrol>(); controlList.Add(control); TestItemsCtrl.ItemsSource = controlList; } }
Теперь, если я запускаю программу и нажимаю на элемент управления, я проверяю аргумент e. Source/e. OriginalSource:
private void TestCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Title = e.Source.GetType().Name; }
Для случая 1 это показывает "TestControl" независимо от того, где я нажимаю на свой TestControl. Это мое желаемое поведение.
Для случая 2 это отображает имя класса любой части "TestControl", на которую я нажал. ("Сетка" или "прямоугольник").
Почему существует эта разница и что я могу сделать, чтобы получить весь TestControl вместо его частей, все еще используя ItemsControl?
Что я уже пробовал:
Я пробовал элементом itemtemplate с моего управления ItemsControl, хотя она мне не нужна/не нужен, потому что свойство ItemsSource содержит в себе элементы управления, так что нет необходимости для шаблона в данном случае.
Я пытался прикрепить событие на элемент управления ItemsControl вместо холста (для).
Это не имеет никакого содержательного значения. (За исключением источника содержит е.Источника содержит сам элемент управления ItemsControl и электронной.OriginalSource, содержащиеся сетки/части прямоугольник из моих TestControl вместо самого TestControl.
#realJSOP
Я обновил свое решение.