Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / Expander.cs / 1305600 / Expander.cs
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Automation.Peers;
using System.Windows.Controls;
using System.ComponentModel;
using MS.Internal.KnownBoxes;
namespace System.Windows.Controls
{
///
/// Specifies the expanding direction of a expansion.
///
public enum ExpandDirection
{
///
/// Expander will expand to the down direction.
///
Down = 0,
///
/// Expander will expand to the up direction.
///
Up = 1,
///
/// Expander will expand to the left direction.
///
Left = 2,
///
/// Expander will expand to the right direction.
///
Right = 3,
}
///
/// An Expander control allows a user to view a header and expand that
/// header to see further details of the content, or to collapse the section
/// up to the header to save space.
///
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)] // cannot be read & localized as string
public class Expander : HeaderedContentControl
{
//-------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------
#region Constructors
static Expander()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Expander), new FrameworkPropertyMetadata(typeof(Expander)));
_dType = DependencyObjectType.FromSystemTypeInternal(typeof(Expander));
IsTabStopProperty.OverrideMetadata(typeof(Expander), new FrameworkPropertyMetadata(BooleanBoxes.FalseBox));
IsMouseOverPropertyKey.OverrideMetadata(typeof(Expander), new UIPropertyMetadata(new PropertyChangedCallback(OnVisualStatePropertyChanged)));
IsEnabledProperty.OverrideMetadata(typeof(Expander), new UIPropertyMetadata(new PropertyChangedCallback(OnVisualStatePropertyChanged)));
}
#endregion
//--------------------------------------------------------------------
//
// Public Properties
//
//-------------------------------------------------------------------
#region Public Properties
///
/// ExpandDirection specifies to which direction the content will expand
///
[Bindable(true), Category("Behavior")]
public ExpandDirection ExpandDirection
{
get { return (ExpandDirection) GetValue(ExpandDirectionProperty); }
set { SetValue(ExpandDirectionProperty, value); }
}
///
/// The DependencyProperty for the ExpandDirection property.
/// Default Value: ExpandDirection.Down
///
public static readonly DependencyProperty ExpandDirectionProperty =
DependencyProperty.Register(
"ExpandDirection",
typeof(ExpandDirection),
typeof(Expander),
new FrameworkPropertyMetadata(
ExpandDirection.Down /* default value */,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(OnVisualStatePropertyChanged)),
new ValidateValueCallback(IsValidExpandDirection));
private static bool IsValidExpandDirection(object o)
{
ExpandDirection value = (ExpandDirection)o;
return (value == ExpandDirection.Down ||
value == ExpandDirection.Left ||
value == ExpandDirection.Right ||
value == ExpandDirection.Up);
}
///
/// The DependencyProperty for the IsExpanded property.
/// Default Value: false
///
public static readonly DependencyProperty IsExpandedProperty =
DependencyProperty.Register(
"IsExpanded",
typeof(bool),
typeof(Expander),
new FrameworkPropertyMetadata(
BooleanBoxes.FalseBox /* default value */,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal,
new PropertyChangedCallback(OnIsExpandedChanged)));
private static void OnIsExpandedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Expander ep = (Expander) d;
bool newValue = (bool) e.NewValue;
// Fire accessibility event
ExpanderAutomationPeer peer = UIElementAutomationPeer.FromElement(ep) as ExpanderAutomationPeer;
if(peer != null)
{
peer.RaiseExpandCollapseAutomationEvent(!newValue, newValue);
}
if (newValue)
{
ep.OnExpanded();
}
else
{
ep.OnCollapsed();
}
ep.UpdateVisualState();
}
///
/// IsExpanded indicates whether the expander is currently expanded.
///
[Bindable(true), Category("Appearance")]
public bool IsExpanded
{
get { return (bool) GetValue(IsExpandedProperty); }
set { SetValue(IsExpandedProperty, BooleanBoxes.Box(value)); }
}
///
/// Expanded event.
///
public static readonly RoutedEvent ExpandedEvent =
EventManager.RegisterRoutedEvent("Expanded",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Expander)
);
///
/// Expanded event. It is fired when IsExpanded changed from false to true.
///
public event RoutedEventHandler Expanded
{
add { AddHandler(ExpandedEvent, value); }
remove { RemoveHandler(ExpandedEvent, value); }
}
///
/// Collapsed event.
///
public static readonly RoutedEvent CollapsedEvent =
EventManager.RegisterRoutedEvent("Collapsed",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Expander)
);
///
/// Collapsed event. It is fired when IsExpanded changed from true to false.
///
public event RoutedEventHandler Collapsed
{
add { AddHandler(CollapsedEvent, value); }
remove { RemoveHandler(CollapsedEvent, value); }
}
#endregion
//--------------------------------------------------------------------
//
// Protected Methods
//
//--------------------------------------------------------------------
#region Protected Methods
internal override void ChangeVisualState(bool useTransitions)
{
// Handle the Common states
if (!IsEnabled)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateDisabled, VisualStates.StateNormal);
}
else if (IsMouseOver)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateMouseOver, VisualStates.StateNormal);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateNormal);
}
// Handle the Focused states
if (IsKeyboardFocused)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateFocused, VisualStates.StateUnfocused);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateUnfocused);
}
if (IsExpanded)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpanded);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateCollapsed);
}
switch (ExpandDirection)
{
case ExpandDirection.Down:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandDown);
break;
case ExpandDirection.Up:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandUp);
break;
case ExpandDirection.Left:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandLeft);
break;
default:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandRight);
break;
}
base.ChangeVisualState(useTransitions);
}
///
/// A virtual function that is called when the IsExpanded property is changed to true.
/// Default behavior is to raise an ExpandedEvent.
///
protected virtual void OnExpanded()
{
RoutedEventArgs args = new RoutedEventArgs();
args.RoutedEvent = Expander.ExpandedEvent;
args.Source = this;
RaiseEvent(args);
}
///
/// A virtual function that is called when the IsExpanded property is changed to false.
/// Default behavior is to raise a CollapsedEvent.
///
protected virtual void OnCollapsed()
{
RaiseEvent(new RoutedEventArgs(Expander.CollapsedEvent, this));
}
#endregion
#region Accessibility
///
/// Creates AutomationPeer ( )
///
protected override AutomationPeer OnCreateAutomationPeer()
{
return new ExpanderAutomationPeer(this);
}
#endregion
//-------------------------------------------------------------------
//
// Private Fields
//
//--------------------------------------------------------------------
#region Private Fields
#endregion
#region DTypeThemeStyleKey
// Returns the DependencyObjectType for the registered ThemeStyleKey's default
// value. Controls will override this method to return approriate types.
internal override DependencyObjectType DTypeThemeStyleKey
{
get { return _dType; }
}
private static DependencyObjectType _dType;
#endregion DTypeThemeStyleKey
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Automation.Peers;
using System.Windows.Controls;
using System.ComponentModel;
using MS.Internal.KnownBoxes;
namespace System.Windows.Controls
{
///
/// Specifies the expanding direction of a expansion.
///
public enum ExpandDirection
{
///
/// Expander will expand to the down direction.
///
Down = 0,
///
/// Expander will expand to the up direction.
///
Up = 1,
///
/// Expander will expand to the left direction.
///
Left = 2,
///
/// Expander will expand to the right direction.
///
Right = 3,
}
///
/// An Expander control allows a user to view a header and expand that
/// header to see further details of the content, or to collapse the section
/// up to the header to save space.
///
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)] // cannot be read & localized as string
public class Expander : HeaderedContentControl
{
//-------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------
#region Constructors
static Expander()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Expander), new FrameworkPropertyMetadata(typeof(Expander)));
_dType = DependencyObjectType.FromSystemTypeInternal(typeof(Expander));
IsTabStopProperty.OverrideMetadata(typeof(Expander), new FrameworkPropertyMetadata(BooleanBoxes.FalseBox));
IsMouseOverPropertyKey.OverrideMetadata(typeof(Expander), new UIPropertyMetadata(new PropertyChangedCallback(OnVisualStatePropertyChanged)));
IsEnabledProperty.OverrideMetadata(typeof(Expander), new UIPropertyMetadata(new PropertyChangedCallback(OnVisualStatePropertyChanged)));
}
#endregion
//--------------------------------------------------------------------
//
// Public Properties
//
//-------------------------------------------------------------------
#region Public Properties
///
/// ExpandDirection specifies to which direction the content will expand
///
[Bindable(true), Category("Behavior")]
public ExpandDirection ExpandDirection
{
get { return (ExpandDirection) GetValue(ExpandDirectionProperty); }
set { SetValue(ExpandDirectionProperty, value); }
}
///
/// The DependencyProperty for the ExpandDirection property.
/// Default Value: ExpandDirection.Down
///
public static readonly DependencyProperty ExpandDirectionProperty =
DependencyProperty.Register(
"ExpandDirection",
typeof(ExpandDirection),
typeof(Expander),
new FrameworkPropertyMetadata(
ExpandDirection.Down /* default value */,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(OnVisualStatePropertyChanged)),
new ValidateValueCallback(IsValidExpandDirection));
private static bool IsValidExpandDirection(object o)
{
ExpandDirection value = (ExpandDirection)o;
return (value == ExpandDirection.Down ||
value == ExpandDirection.Left ||
value == ExpandDirection.Right ||
value == ExpandDirection.Up);
}
///
/// The DependencyProperty for the IsExpanded property.
/// Default Value: false
///
public static readonly DependencyProperty IsExpandedProperty =
DependencyProperty.Register(
"IsExpanded",
typeof(bool),
typeof(Expander),
new FrameworkPropertyMetadata(
BooleanBoxes.FalseBox /* default value */,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal,
new PropertyChangedCallback(OnIsExpandedChanged)));
private static void OnIsExpandedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Expander ep = (Expander) d;
bool newValue = (bool) e.NewValue;
// Fire accessibility event
ExpanderAutomationPeer peer = UIElementAutomationPeer.FromElement(ep) as ExpanderAutomationPeer;
if(peer != null)
{
peer.RaiseExpandCollapseAutomationEvent(!newValue, newValue);
}
if (newValue)
{
ep.OnExpanded();
}
else
{
ep.OnCollapsed();
}
ep.UpdateVisualState();
}
///
/// IsExpanded indicates whether the expander is currently expanded.
///
[Bindable(true), Category("Appearance")]
public bool IsExpanded
{
get { return (bool) GetValue(IsExpandedProperty); }
set { SetValue(IsExpandedProperty, BooleanBoxes.Box(value)); }
}
///
/// Expanded event.
///
public static readonly RoutedEvent ExpandedEvent =
EventManager.RegisterRoutedEvent("Expanded",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Expander)
);
///
/// Expanded event. It is fired when IsExpanded changed from false to true.
///
public event RoutedEventHandler Expanded
{
add { AddHandler(ExpandedEvent, value); }
remove { RemoveHandler(ExpandedEvent, value); }
}
///
/// Collapsed event.
///
public static readonly RoutedEvent CollapsedEvent =
EventManager.RegisterRoutedEvent("Collapsed",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Expander)
);
///
/// Collapsed event. It is fired when IsExpanded changed from true to false.
///
public event RoutedEventHandler Collapsed
{
add { AddHandler(CollapsedEvent, value); }
remove { RemoveHandler(CollapsedEvent, value); }
}
#endregion
//--------------------------------------------------------------------
//
// Protected Methods
//
//--------------------------------------------------------------------
#region Protected Methods
internal override void ChangeVisualState(bool useTransitions)
{
// Handle the Common states
if (!IsEnabled)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateDisabled, VisualStates.StateNormal);
}
else if (IsMouseOver)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateMouseOver, VisualStates.StateNormal);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateNormal);
}
// Handle the Focused states
if (IsKeyboardFocused)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateFocused, VisualStates.StateUnfocused);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateUnfocused);
}
if (IsExpanded)
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpanded);
}
else
{
VisualStates.GoToState(this, useTransitions, VisualStates.StateCollapsed);
}
switch (ExpandDirection)
{
case ExpandDirection.Down:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandDown);
break;
case ExpandDirection.Up:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandUp);
break;
case ExpandDirection.Left:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandLeft);
break;
default:
VisualStates.GoToState(this, useTransitions, VisualStates.StateExpandRight);
break;
}
base.ChangeVisualState(useTransitions);
}
///
/// A virtual function that is called when the IsExpanded property is changed to true.
/// Default behavior is to raise an ExpandedEvent.
///
protected virtual void OnExpanded()
{
RoutedEventArgs args = new RoutedEventArgs();
args.RoutedEvent = Expander.ExpandedEvent;
args.Source = this;
RaiseEvent(args);
}
///
/// A virtual function that is called when the IsExpanded property is changed to false.
/// Default behavior is to raise a CollapsedEvent.
///
protected virtual void OnCollapsed()
{
RaiseEvent(new RoutedEventArgs(Expander.CollapsedEvent, this));
}
#endregion
#region Accessibility
///
/// Creates AutomationPeer ( )
///
protected override AutomationPeer OnCreateAutomationPeer()
{
return new ExpanderAutomationPeer(this);
}
#endregion
//-------------------------------------------------------------------
//
// Private Fields
//
//--------------------------------------------------------------------
#region Private Fields
#endregion
#region DTypeThemeStyleKey
// Returns the DependencyObjectType for the registered ThemeStyleKey's default
// value. Controls will override this method to return approriate types.
internal override DependencyObjectType DTypeThemeStyleKey
{
get { return _dType; }
}
private static DependencyObjectType _dType;
#endregion DTypeThemeStyleKey
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectDataSourceSelectingEventArgs.cs
- Identity.cs
- DefaultEvaluationContext.cs
- TrackingServices.cs
- RSAPKCS1SignatureFormatter.cs
- SqlUnionizer.cs
- TableItemStyle.cs
- ActivationArguments.cs
- ListViewInsertEventArgs.cs
- Stylesheet.cs
- Missing.cs
- ColorTranslator.cs
- TextTreeTextElementNode.cs
- DefaultTraceListener.cs
- ArgIterator.cs
- RegexParser.cs
- AddingNewEventArgs.cs
- XPathSelectionIterator.cs
- LicenseProviderAttribute.cs
- EntityViewGenerationAttribute.cs
- ServiceOperation.cs
- SQLGuid.cs
- PageBreakRecord.cs
- IBuiltInEvidence.cs
- Constants.cs
- XomlSerializationHelpers.cs
- CodeActivity.cs
- BufferedGraphics.cs
- OrderedDictionary.cs
- SHA1Managed.cs
- WebErrorHandler.cs
- TypedReference.cs
- DeferredTextReference.cs
- Lease.cs
- AmbientProperties.cs
- ParseHttpDate.cs
- Transform3D.cs
- X509Extension.cs
- ViewManagerAttribute.cs
- RelatedImageListAttribute.cs
- ScanQueryOperator.cs
- SqlSupersetValidator.cs
- SemanticResolver.cs
- ServiceMetadataContractBehavior.cs
- RemotingException.cs
- SiteMapHierarchicalDataSourceView.cs
- ObjectListSelectEventArgs.cs
- SlotInfo.cs
- FixedNode.cs
- CultureInfoConverter.cs
- LicenseProviderAttribute.cs
- EditorAttribute.cs
- TextTreeTextNode.cs
- PropertyValue.cs
- HtmlInputButton.cs
- ObjectToIdCache.cs
- RefType.cs
- PrintControllerWithStatusDialog.cs
- DataRowExtensions.cs
- SqlConnectionStringBuilder.cs
- ToolStripSeparator.cs
- TempFiles.cs
- IdnElement.cs
- Error.cs
- QilTargetType.cs
- Logging.cs
- LookupBindingPropertiesAttribute.cs
- HtmlWindowCollection.cs
- DataGridItem.cs
- DebugView.cs
- XmlFormatMapping.cs
- LiteralTextParser.cs
- XmlUTF8TextReader.cs
- CompiledIdentityConstraint.cs
- TextElementEditingBehaviorAttribute.cs
- AppDomainEvidenceFactory.cs
- ModuleConfigurationInfo.cs
- CryptoProvider.cs
- Hashtable.cs
- GC.cs
- sitestring.cs
- MULTI_QI.cs
- ToolboxItemWrapper.cs
- SplineQuaternionKeyFrame.cs
- DurationConverter.cs
- ProtocolImporter.cs
- CachingParameterInspector.cs
- HttpDebugHandler.cs
- ToolStripDropDownClosingEventArgs.cs
- AudioFileOut.cs
- EventsTab.cs
- AstTree.cs
- DBSchemaTable.cs
- ItemType.cs
- NativeMethods.cs
- XmlWriterDelegator.cs
- SingleAnimation.cs
- WindowsFont.cs
- PropertyGeneratedEventArgs.cs
- StrokeCollectionConverter.cs