EditorTemplate事件不会触发

时间:2014-04-04 18:47:47

标签: wpf datatemplate infragistics

我正在创建一个包装Infragistics XamDataTree的WPF UserControl。因此,我使用我自己的XAML语法(在此代码中,它是level)在代码中创建布局,如下所示:

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);

编辑工作正常,TextBlock上的事件被正确抛出,但TextBox上没有任何事件触发。永远。这是我正在做的事情,对EditorTemplate的限制,XamDataTree上的怪癖......这看起来对任何人来说都很熟悉吗?

(同样添加这个因为它包含了很多其他的怪癖,几乎没有任何谷歌果汁,并且可能帮助人们无论如何......关键项目是Mode = TwoWaySeal()致电,ToolTip的空白二传手,VisualTree作业的顺序......换句话说,上面的代码段代表3天的工作。)

0 个答案:

没有答案
相关问题