Как узнать, исходит ли Close от RadPane или RadPaneGroup

Мы объявили следующее:

<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, но кажется, что они всегда содержат только одну панель (ту, которая активна). Но мне действительно нужно знать, нажата ли кнопка groupbutton или panebutton, потому что мы будем обрабатывать другую логику. Есть какие-нибудь мысли?

1 ответ

Решение

После еще нескольких поисков на форуме 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();
        }
    }

Надеюсь, это поможет другим в их поисках аналогичной проблемы.

Другие вопросы по тегам