如何知道 Close 是来自 RadPane 还是 RadPaneGroup
How to know if Close comes from RadPane or RadPaneGroup
我们宣布了以下 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,因为我们将处理其他逻辑。
大家有什么想法吗?
在 Telerik 论坛中仔细查看后,我找到了一个非常接近我需要的解决方案。遗憾的是,没有针对此类问题的内置解决方案。
我无法想象没有必要同时关闭所有功能和关闭选项卡功能。
这里说的是我的解决方案的来源:
Determine Source of Close
这是我编的解决方案:
First I implemented the logic mentioned in above link to the Preview on closing to set a flag that signifies that the group button was clicked or not:
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;
}
}
After that I just check on the flag in the closing method to handle the different logics
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();
}
}
希望这会帮助其他人解决类似的问题。
我们宣布了以下 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,因为我们将处理其他逻辑。 大家有什么想法吗?
在 Telerik 论坛中仔细查看后,我找到了一个非常接近我需要的解决方案。遗憾的是,没有针对此类问题的内置解决方案。 我无法想象没有必要同时关闭所有功能和关闭选项卡功能。
这里说的是我的解决方案的来源: Determine Source of Close
这是我编的解决方案:
First I implemented the logic mentioned in above link to the Preview on closing to set a flag that signifies that the group button was clicked or not:
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;
}
}
After that I just check on the flag in the closing method to handle the different logics
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();
}
}
希望这会帮助其他人解决类似的问题。