I have my RadDocking inside a RadWindow. Whenever a pane opens, it obviously either overlays or compresses the space of the document host. However, I'd prefer the document host to remain fully visible while the pane is visible. The way I tried to achieve that is to increase the RadWindow size (by the size of the RadPane) whenever the RadPane opens. The overall effect would then be that of a pane that opens "to the outside" rather than "to the inside".
I have replaced the ClickFlyoutBehaviour with my own version that first changes the window size and only then does StartOpenAnimation(). The problem I am getting is that the change of the RadWindow is done ok but then the pane is not shown at all.
Any ideas how the "open to the outside" effect can be achieved? Thanks!
My Behavior:
I have replaced the ClickFlyoutBehaviour with my own version that first changes the window size and only then does StartOpenAnimation(). The problem I am getting is that the change of the RadWindow is done ok but then the pane is not shown at all.
Any ideas how the "open to the outside" effect can be achieved? Thanks!
My Behavior:
public
class
SPFlyoutBehavior : IFlyoutBehavior
{
void
IFlyoutBehavior.OnMouseEnter(IFlyoutHost host, RadPane targetPane)
{
}
void
IFlyoutBehavior.OnMouseLeave(IFlyoutHost host)
{
}
void
IFlyoutBehavior.OnOpeningTimerTimeout(IFlyoutHost host)
{
}
void
IFlyoutBehavior.OnClosingTimerTimeout(IFlyoutHost host)
{
}
void
IFlyoutBehavior.OnPaneActivated(IFlyoutHost host, RadPane targetPane)
{
host.SetSelectedPane(targetPane);
if
(host.CurrentState == FlyoutState.Closed)
{
host.StartOpenAnimation();
}
}
void
IFlyoutBehavior.OnPaneDeactivated(IFlyoutHost host, RadPane targetPane)
{
var selectedPane = host.SelectedPane;
if
(selectedPane !=
null
&& !selectedPane.IsActive && host.CurrentState == FlyoutState.Opened)
{
host.StartCloseAnimation();
}
}
private
IFlyoutHost _host;
void
IFlyoutBehavior.OnPaneMouseLeftButtonDown(IFlyoutHost host, RadPane targetPane)
{
// get the RadWindow that we are sitting in
var radWindow = targetPane.ParentOfType<RadWindow>();
if
(radWindow ==
null
)
return
;
_host = host;
// wire up the size changed handler
radWindow.SizeChanged += radWindow_SizeChanged;
// change the size of the window
radWindow.Width += targetPane.AutoHideWidth;
}
void
radWindow_SizeChanged(
object
sender, SizeChangedEventArgs e)
{
if
(_host ==
null
)
return
;
if
(_host.CurrentState != FlyoutState.Opened)
{
// now that the window size has been changed, show the RadPane (too bad we don't get a AnimationFinished() event
_host.StartOpenAnimation();
}
else
{
//corresponding "re-shrink window" logic not yet implemented
_host.StartCloseAnimation();
}
}
}