Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StaysOpen为false的弹出窗口未关闭_C#_Wpf_.net 3.5 - Fatal编程技术网

C# StaysOpen为false的弹出窗口未关闭

C# StaysOpen为false的弹出窗口未关闭,c#,wpf,.net-3.5,C#,Wpf,.net 3.5,我有一个telerik网格视图,当我右键单击标题时,我会显示一个包含列列表的列表框 项目模板被重新定义为显示复选框,以便我可以设置列是否可见。 我还可以拖放列以对其重新排序 下面是我创建弹出窗口的方法: var view = new ColumnsOrderer.ColumnsOrderer { DataContext = new ColumnsOrderer.ViewModelColumnsOrderer(Columns)

我有一个telerik网格视图,当我右键单击标题时,我会显示一个包含列列表的列表框

项目模板被重新定义为显示复选框,以便我可以设置列是否可见。 我还可以拖放列以对其重新排序

下面是我创建弹出窗口的方法:

var view = new ColumnsOrderer.ColumnsOrderer
            {
                DataContext = new ColumnsOrderer.ViewModelColumnsOrderer(Columns)
            };

var codePopup = new Popup
                    {
                        Child = view,
                        MaxHeight = 400,
                        StaysOpen = false,
                        Placement = PlacementMode.Mouse
                    };
codePopup.IsOpen = true;
现在一切似乎都正常,但事实并非如此。 如果我将列设置为可见或隐藏,然后在弹出窗口外单击,它将正确关闭

虽然如果我拖动一个项目对其进行重新排序,弹出窗口似乎会失去焦点,如果我在弹出窗口外单击,它将不会关闭。我必须在弹出窗口内的列表框中单击后退,然后单击外部关闭

以下是我的拖放事件:

public ColumnsOrderer()
{
    InitializeComponent();
    InitialiazeListBoxDragDrop();
}

private void InitialiazeListBoxDragDrop()
{
    var itemContainerStyle = new Style(typeof(ListBoxItem));

    itemContainerStyle.Setters.Add(new Setter(AllowDropProperty, true));
    itemContainerStyle.Setters.Add(new EventSetter(PreviewMouseMoveEvent, new MouseEventHandler(OnMouseMove)));
    itemContainerStyle.Setters.Add(new EventSetter(DropEvent, new DragEventHandler(OnDrop)));

    listColumns.ItemContainerStyle = itemContainerStyle;
}

void OnMouseMove(object sender, MouseEventArgs e)
{
    if (e.OriginalSource is CheckBox || e.LeftButton == MouseButtonState.Released)
        return;

    if (sender is ListBoxItem)
    {
        var draggedItem = sender as ListBoxItem;
        draggedItem.IsSelected = true;

        DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
    }
}

void OnDrop(object sender, DragEventArgs e)
{
    if (!(sender is ListBoxItem))
        return;
}
有趣的是,如果我删除OnDrop处理程序,问题就不存在了。 我尝试了很多方法将焦点设置回弹出窗口,但都不起作用


有人能帮我吗?

在拖放操作后,尝试重新聚焦您的
弹出控件如何

void OnDrop(object sender, DragEventArgs e)
{
    if (!(sender is ListBoxItem))
        return;
    codePopup.Focus();
}

OnDrop位于弹出窗口内控件的代码隐藏中。我不想让父对象作为弹出窗口来设置其焦点。这个控件可以在其他地方使用…即使我不想这样做,我也尝试过,但它不起作用