Как узнать, исходит ли 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();
}
}
Надеюсь, это поможет другим в их поисках аналогичной проблемы.