Хороший вопрос.
Похоже, что это ошибка в компоненте WPF PresentationBuildTasks
.
Как вы знаете, создание проекта WPF вызывает много сгенерированных компиляторомкод для внедрения в ваши UI-классы.
Например, ваш MainWindow
класс дополнительно получит что-то вроде этого:
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
public void InitializeComponent()
{
if (!_contentLoaded)
{
_contentLoaded = true;
Uri resourceLocater = new Uri("/WpfApp1;component/mainwindow.xaml", UriKind.Relative);
Application.LoadComponent(this, resourceLocater);
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
if (connectionId == 2)
{
treeViewBookmarks = (TreeView)target;
}
else
{
_contentLoaded = true;
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IStyleConnector.Connect(int connectionId, object target)
{
if (connectionId == 1)
{
EventSetter eventSetter = new EventSetter();
eventSetter.Event = Control.MouseDoubleClickEvent;
eventSetter.Handler = new MouseButtonEventHandler(TreeViewItem_MouseDoubleClick);
((Style)target).Setters.Add(eventSetter);
}
}
Эти Connect
методы генерируются неправильно.
Если вы замените ButtonEx
в DataTemplate
на Button
, эти Connect
методы будут выглядеть следующим образом:
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
if (connectionId == 3)
{
treeViewBookmarks = (TreeView)target;
}
else
{
_contentLoaded = true;
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IStyleConnector.Connect(int connectionId, object target)
{
switch (connectionId)
{
case 1:
((Button)target).AddHandler(ToolTipService.ToolTipClosingEvent, new ToolTipEventHandler(ButtonEx_ToolTipClosing));
break;
case 2:
{
EventSetter eventSetter = new EventSetter();
eventSetter.Event = Control.MouseDoubleClickEvent;
eventSetter.Handler = new MouseButtonEventHandler(TreeViewItem_MouseDoubleClick);
((Style)target).Setters.Add(eventSetter);
break;
}
}
}
Смотрите, connectionId
отличается.
Вам следует сообщить об этой проблеме в Microsoft.Что-то идет не так в PresentationBuildTasks
для вашего случая.