EditorTemplate events do not fire

I am creating a WPF UserControl that wraps Infragistics XamDataTree. Thus, I am creating a layout in the code from my own XAML syntax (in this code, this level), as shown below:

var layout = new NodeLayout
{
    Key = level.Description ?? level.NodeType.Name,
    TargetTypeName = level.NodeType.Name,
    IsExpandedMemberPath = level.IsExpandedMemberPath,
};

var itemTemplate = new DataTemplate(level.NodeType);
var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
stackPanelFactory.Name = level.NodeType.Name + "Factory";
stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

if (!string.IsNullOrEmpty(level.IsCheckedMemberPath))
{
    var checkBoxFactory = new FrameworkElementFactory(typeof(CheckBox));
    checkBoxFactory.SetBinding(ToggleButton.IsCheckedProperty, new Binding("Data." + level.IsCheckedMemberPath));
    if (!string.IsNullOrEmpty(level.IsCheckableMemberPath))
        checkBoxFactory.SetBinding(IsEnabledProperty, new Binding("Data." + level.IsCheckableMemberPath));
    stackPanelFactory.AppendChild(checkBoxFactory);
}

var textBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
textBlockFactory.SetBinding(TextBlock.TextProperty, new Binding("Data.Name"));
textBlockFactory.AddHandler(ToolTipOpeningEvent, new ToolTipEventHandler(HandleTextBlockToolTipOpening), true);
textBlockFactory.AddHandler(ToolTipClosingEvent, new ToolTipEventHandler(HandleTextBlockToolTipClosing), true);
textBlockFactory.SetValue(ToolTipProperty, " "); // need some value in there to trigger the event

stackPanelFactory.AppendChild(textBlockFactory);

itemTemplate.VisualTree = stackPanelFactory;
layout.ItemTemplate = itemTemplate;

if (level.AllowEdit)
{
    layout.EditingSettings.AllowDeletion = false;
    layout.EditingSettings.AllowEditing = true;
    layout.EditingSettings.IsEnterKeyEditingEnabled = false;
    layout.EditingSettings.IsF2EditingEnabled = true;
    layout.EditingSettings.IsMouseActionEditingEnabled = TreeMouseEditingAction.DoubleClick;
    layout.EditingSettings.IsOnNodeActiveEditingEnabled = false;

    var editTemplate = new DataTemplate(level.NodeType);
    var editStackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
    editStackPanelFactory.Name = level.NodeType.Name + "EditFactory";
    editStackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
    var textBoxFactory = new FrameworkElementFactory(typeof(TextBox));
    textBoxFactory.SetBinding(TextBox.TextProperty, new Binding("Data.Name") { Mode = BindingMode.TwoWay });
    textBoxFactory.AddHandler(TextBox.LoadedEvent, new RoutedEventHandler(TextBoxSelectAll), true);
    textBoxFactory.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(Target), true);
    editStackPanelFactory.AppendChild(textBoxFactory);
    editTemplate.VisualTree = editStackPanelFactory;
    editTemplate.Seal();
    layout.EditorTemplate = editTemplate;
}
Tree.GlobalNodeLayouts.Add(layout);

Editing works, events TextBlockare not thrown correctly, but none of the events TextBoxare triggered. Ever. Am I doing something, a restriction on EditorTemplate, a fad on XamDataTree... is this familiar to anyone?

( , , , Google, , , ... Mode = TwoWay, Seal(), setter ToolTip, VisualTree ..., -, 3 .)

+4

Source: https://habr.com/ru/post/1535084/


All Articles