如何知道关闭是来自RadPane还是RadPaneGroup?

问题描述 投票:0回答:1

我们声明了以下Raddocking。

<telerik:RadDocking 
        x:Name="RadDocking" 
        RetainPaneSizeMode="DockingAndFloating" 
        Close="RadDocking_OnClose" 
        CloseButtonPosition="InPaneAndGroup"
        HorizontalContentAlignment="Stretch"
        VerticalContentAlignment="Stretch"
        Loaded="RadDocking_OnLoaded"
        Visibility="{Binding IsMenuLoaded, Converter={StaticResource BooleanToVisibilityConverter}}">
        <telerik:RadDocking.DocumentHost>
            <telerik:RadSplitContainer>
                <telerik:RadPaneGroup prism:RegionManager.RegionName="MainRegion" DropDownDisplayMode="WhenNeeded">
                </telerik:RadPaneGroup>
            </telerik:RadSplitContainer>
        </telerik:RadDocking.DocumentHost>
</telerik:RadDocking>

如你所见,我们使用了CloseButtonPosition InPaneAndGroup.And我们在Close事件中实现了我们自己的逻辑,但我想检查我们是否点击了窗格中的关闭按钮,或者点击了组的关闭按钮。但我真的需要知道是groupbutton还是panebutton被按下,因为我们将处理其他逻辑。有人有什么想法吗?

wpf telerik raddocking
1个回答
0
投票

在Telerik论坛上我找到了一个非常接近我所需要的解决方案。只可惜没有内置的解决方案。我无法想象没有必要在同一时间关闭所有功能和关闭标签功能。

这就是我基于我的解决方案的来源。确定关闭功能的来源

这是我做的解决方案。

首先,我在关闭时的Preview中实现了上面链接中提到的逻辑,设置了一个标志,表示该组按钮是否被点击。

    private void RadDocking_OnPreviewClose(object sender, StateChangeEventArgs e)
    {
        RadPane pane = e.Panes.ToList()[0];
        Point pt = Mouse.GetPosition(pane);
        if (pt.X <= pane.ActualWidth)
        {
            _groupClosing = false;
        }
        else
        {
            _groupClosing = true;
        }
    }

然后,我只是在关闭方法中检查标志,以处理不同的逻辑:

    private void RadDocking_OnClose(object sender, StateChangeEventArgs e)
    {
        if (!_groupClosing)
        {
            _regionManager.GetRegion(Constants.MainRegion).Remove(e.Panes.First().Content);
        }
        else
        {
            _regionManager.GetRegion(Constants.MainRegion).RemoveAll();
        }
    }

希望能帮助其他有类似问题的人解决。

© www.soinside.com 2019 - 2024. All rights reserved.