StaysOpen为false的弹出窗口没有关闭

时间:2013-08-23 12:41:50

标签: c# wpf .net-3.5

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

重新定义项目模板以显示复选框,以便我可以将列设置为可见或不可见。 我也可以拖放列来重新排序。

以下是我创建Popup的方法:

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处理程序,问题就不存在了。 我尝试了很多方法将重点放回到弹出窗口,但它没有用。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

在拖放操作后尝试重新聚焦Popup控件怎么样?

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