0

我们声明了以下 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。我们在 Close 事件上实现了我们自己的逻辑。但是我想检查我们是否单击了窗格中的关闭按钮,或者单击了组的关闭按钮。有没有办法知道这一点?我检查了 Sender & StateChangedeventArgs,但它们似乎总是只保留 1 个窗格(处于活动状态的那个)。但我真的需要知道按下的是 groupbutton 还是 panebutton,因为我们将处理其他逻辑。有人有什么想法吗?

4

1 回答 1

0

在 Telerik 论坛上进行了更多查看后,我发现了一个非常接近我需要的解决方案。可惜没有针对此类问题的内置解决方案。我无法想象没有必要同时关闭所有功能和关闭选项卡功能。

这就是我的解决方案的 来源:确定关闭的来源

这是我制定的解决方案:

首先,我实现了上述链接中提到的关闭时预览链接中提到的逻辑,以设置一个标志,该标志表示是否单击了组按钮:

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

希望这将有助于其他人寻求类似的问题。

于 2020-04-28T09:27:01.813 回答