private void OnAfterBinding( object sender, WindowBindedEventArgs e ) { IWindowElement master = e.Binding.Target; IWindowElement slave = e.Binding.Origin; BindingPosition position = e.Binding.Position; if( e.BindingType == BindingEventType.Attach ) { CreateButton( master, slave, position ); } else if( e.BindingType == BindingEventType.Detach ) { RemoveButton( master, slave ); } }
protected void Service_AfterBinding( object sender, WindowBindedEventArgs e ) { if( AfterBinding != null ) AfterBinding( e ); }
public IBindResult PreviewUnbind( IWindowElement target, IWindowElement origin ) { if( Dispatcher.CurrentDispatcher != Application.Current.Dispatcher ) throw new InvalidOperationException( "This method should only be called by the Application Thread." ); var binding = new SimpleBinding { Target = target, Origin = origin }; var evt = new WindowBindedEventArgs { Binding = binding, BindingType = BindingEventType.Detach }; if( PreviewBinding != null ) PreviewBinding( this, evt ); return new UnbindResult( this, binding ); }
public void Unbind( IWindowElement me, IWindowElement other, bool saveBinding = true ) { if( Dispatcher.CurrentDispatcher != Application.Current.Dispatcher ) throw new InvalidOperationException( "This method should only be called by the Application Thread." ); if( me == null ) throw new ArgumentNullException( "me" ); if( other == null ) throw new ArgumentNullException( "other" ); SpatialBinding spatialBinding = null; if( _spatialBindings.TryGetValue( me, out spatialBinding ) ) { var binding = new SimpleBinding { Target = me, Origin = other }; var evt = new WindowBindingEventArgs { Binding = binding, BindingType = BindingEventType.Detach }; if( BeforeBinding != null ) BeforeBinding( this, evt ); if( evt.Canceled == false ) { Debug.Assert( me == spatialBinding.Window ); if( spatialBinding.Bottom != null && spatialBinding.Bottom.Window == other ) { //UnbindButtonManager.Service.RemoveButton( spatialBinding.Bottom.UnbindButton ); spatialBinding.Bottom = null; Unbind( other, me, saveBinding ); } if( spatialBinding.Left != null && spatialBinding.Left.Window == other ) { //UnbindButtonManager.Service.RemoveButton( spatialBinding.Left.UnbindButton ); spatialBinding.Left = null; Unbind( other, me, saveBinding ); } if( spatialBinding.Top != null && spatialBinding.Top.Window == other ) { //UnbindButtonManager.Service.RemoveButton( spatialBinding.Top.UnbindButton ); spatialBinding.Top = null; Unbind( other, me, saveBinding ); } if( spatialBinding.Right != null && spatialBinding.Right.Window == other ) { //UnbindButtonManager.Service.RemoveButton( spatialBinding.Right.UnbindButton ); spatialBinding.Right = null; Unbind( other, me, saveBinding ); } if( spatialBinding.IsAlone ) _spatialBindings.Remove( me ); if( !saveBinding ) _persistantBindings.Remove( binding ); } var evtAfter = new WindowBindedEventArgs { Binding = binding, BindingType = BindingEventType.Detach }; if( AfterBinding != null ) AfterBinding( this, evtAfter ); } }
public IBindResult PreviewBind( IWindowElement target, IWindowElement origin, BindingPosition position ) { if( Dispatcher.CurrentDispatcher != Application.Current.Dispatcher ) throw new InvalidOperationException( "This method should only be called by the Application Thread." ); if( target == null ) throw new ArgumentNullException( "master" ); if( origin == null ) throw new ArgumentNullException( "slave" ); SpatialBinding targetSpatialBinding = null; SpatialBinding originSpatialBinding = null; if( CanBind( target, origin, position, out targetSpatialBinding, out originSpatialBinding ) ) { var binding = new SimpleBinding { Target = target, Origin = origin, Position = position }; var evt = new WindowBindedEventArgs { Binding = binding, BindingType = BindingEventType.Attach }; if( PreviewBinding != null ) PreviewBinding( this, evt ); return new BindResult( this, binding ); } return NullResult.Default; }
public void Bind( IWindowElement master, IWindowElement slave, BindingPosition position, bool saveBinding = false ) { if( Dispatcher.CurrentDispatcher != Application.Current.Dispatcher ) throw new InvalidOperationException( "This method should only be called by the Application Thread." ); if( master == null ) throw new ArgumentNullException( "master" ); if( slave == null ) throw new ArgumentNullException( "slave" ); //Console.WriteLine( "BIND thread id: {0} TimeSpan : {1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.Ticks ); // Spatial binding point of view using( _logger.OpenGroup( LogLevel.Info, "Attaching {0} on {1} at {2}", master.Name, slave.Name, position.ToString() ) ) { SpatialBinding spatialBinding = null; SpatialBinding slaveSpatialBinding = null; if( CanBind( master, slave, position, out spatialBinding, out slaveSpatialBinding ) ) { _logger.Trace( "Before binding..." ); var binding = new SimpleBinding { Target = master, Origin = slave, Position = position }; var evt = new WindowBindingEventArgs { Binding = binding, BindingType = BindingEventType.Attach }; if( BeforeBinding != null ) BeforeBinding( this, evt ); if( evt.Canceled == true ) { _logger.Trace( "...canceled. The reason was {0}.", evt.CancelReason ?? "No Reason" ); } else { if( spatialBinding == null ) { spatialBinding = new SpatialBinding( master ); _spatialBindings.Add( master, spatialBinding ); } if( slaveSpatialBinding == null ) { slaveSpatialBinding = new SpatialBinding( slave ); _spatialBindings.Add( slave, slaveSpatialBinding ); } Debug.Assert( spatialBinding != null ); Debug.Assert( slaveSpatialBinding != null ); //TODO : FIXWITHDOCKING if( position == BindingPosition.Top ) { spatialBinding.Top = slaveSpatialBinding; slaveSpatialBinding.Bottom = spatialBinding; } if( position == BindingPosition.Left ) { spatialBinding.Left = slaveSpatialBinding; slaveSpatialBinding.Right = spatialBinding; } if( position == BindingPosition.Bottom ) { spatialBinding.Bottom = slaveSpatialBinding; slaveSpatialBinding.Top = spatialBinding; } if( position == BindingPosition.Right ) { spatialBinding.Right = slaveSpatialBinding; slaveSpatialBinding.Left = spatialBinding; } if( saveBinding ) _persistantBindings.Add( binding ); var evtAfter = new WindowBindedEventArgs { Binding = binding, BindingType = BindingEventType.Attach }; _logger.Trace( "After binding..." ); if( AfterBinding != null ) AfterBinding( this, evtAfter ); } } } }
void OnPreviewBinding( object sender, WindowBindedEventArgs e ) { Debug.Assert( Dispatcher.CurrentDispatcher == NoFocusManager.Default.ExternalDispatcher, "This method should only be called by the ExternalThread." ); if( e.BindingType == BindingEventType.Attach ) { if( !_placeholder.IsPreviewOf( e.Binding ) ) _placeholder.Display( e.Binding ); } else _placeholder.Shutdown(); }
void OnAfterBinding( object sender, WindowBindedEventArgs e ) { _placeholder.Shutdown(); }
void OnAfterBinding( object sender, WindowBindedEventArgs e ) { Debug.Assert( Dispatcher.CurrentDispatcher == Application.Current.Dispatcher, "This method should only be called by the Application Thread." ); _tester.Release(); }