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, " ");
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 .)