Как узнать, прибывает ли Close из RadPane или RadPaneGroup - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть следующие объявленные 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. И мы реализуем нашу собственную логику c на событии Close. Но я хочу проверить, нажали ли мы кнопку закрытия на панели или кнопку закрытия группы. Есть ли способ узнать это? Я проверил Sender & StateChangedeventArgs, но кажется, что они всегда содержат только 1 панель (активную). Но мне действительно нужно знать, нажата ли кнопка группы или панели, потому что мы будем обрабатывать другие логи c. У кого-нибудь есть мысли?

1 Ответ

0 голосов
/ 28 апреля 2020

После еще одного осмотра на форуме Telerik я нашел решение, которое очень близко подходит к тому, что мне нужно. Жаль только, что нет решения для чего-то подобного. Я не могу себе представить, что нет необходимости одновременно закрывать все функции и закрывать вкладки.

Здесь указан источник, на котором я основал свое решение: Определить источник закрытия

Вот решение, которое я составил:

Сначала я реализовал logi c, упомянутый в ссылке выше, для предварительного просмотра при закрытии, чтобы установить флаг, который означает, что группа была нажата кнопка или нет:

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

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

...