Files
win8phoneApp/CampusAppWP8/CampusAppWP8/Utility/Lui/Button/ToggleButton.cs
2013-07-08 18:46:31 +02:00

258 lines
7.5 KiB
C#

//-----------------------------------------------------------------------
// <copyright file="ToggleButton.cs" company="BTU/IIT">
// Company copyright tag.
// </copyright>
// <author>stubbfel</author>
// <sience>08.07.2013</sience>
//----------------------------------------------------------------------
namespace CampusAppWP8.Utility.Lui.Button
{
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
/// <summary>
/// This class create an Button which can toggle the Visibility of certain FrameworkElements
/// </summary>
public class ToggleButton : System.Windows.Controls.Button
{
#region Members
#region public
/// <summary>
/// Register the ToggleContentTag
/// </summary>
public static readonly DependencyProperty ToggleContentTagProperty = DependencyProperty.Register("ToggleContentTag", typeof(object), typeof(ToggleButton), new PropertyMetadata(false));
#endregion
#region private
/// <summary>
/// List of FrameworkElement which can change their Visibility by this button
/// </summary>
private List<FrameworkElement> toggleElements = null;
/// <summary>
/// EventHandler of the ToggleButton
/// </summary>
private ToggleButtonHandler eventHandler;
#endregion
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="ToggleButton" /> class.
/// </summary>
public ToggleButton()
: base()
{
}
#endregion
#region Events
/// <summary>
/// Delegate for the ToggleButton events
/// </summary>
private delegate void ToggleButtonHandler();
/// <summary>
/// The closeButtonEvent
/// </summary>
private static event ToggleButtonHandler CloseButtonEvent;
#endregion
#region Proberties
/// <summary>
/// Gets or sets the ToggleContentTag
/// </summary>
public object ToggleContentTag
{
get { return (object)this.GetValue(ToggleContentTagProperty); }
set { this.SetValue(ToggleContentTagProperty, value); }
}
#endregion
#region Methods
#region public
/// <summary>
/// Method close the ToggleContent of the old ToggleContent and then show the new one
/// </summary>
public void ToggleToggleContent()
{
if (this.toggleElements != null)
{
// close the old (other) Button
if (CloseButtonEvent != null && !CloseButtonEvent.Equals(this.eventHandler))
{
CloseButtonEvent();
}
foreach (UIElement elment in this.toggleElements)
{
this.ToggleToggleContentElement(elment);
}
}
}
/// <summary>
/// Method show all Element of the ToggleContent
/// </summary>
public void ShowToggleContent()
{
if (this.toggleElements != null)
{
foreach (UIElement elment in this.toggleElements)
{
this.ShowToggleContentElement(elment);
}
}
}
/// <summary>
/// Method show all Element of the ToggleContent
/// </summary>
public void HideToggleContent()
{
if (this.toggleElements != null)
{
foreach (UIElement elment in this.toggleElements)
{
this.HideToggleContentElement(elment);
}
}
}
#endregion
#region protected
/// <summary>
/// Overrides the OnClick-Method from button
/// </summary>
/// <remarks>
/// now method toggle the visibility of some FrameWorkElements
/// </remarks>
protected override void OnClick()
{
if (this.toggleElements == null)
{
this.SetupToggleElements();
}
this.ToggleToggleContent();
}
#endregion
#region private
/// <summary>
/// Method look for some ToggleContent
/// </summary>
private void SetupToggleElements()
{
this.toggleElements = new List<FrameworkElement>();
Panel parent = this.Parent as Panel;
if (parent == null)
{
parent = this.GetFirstParentPanel();
}
foreach (FrameworkElement element in parent.Children)
{
string elementTag = element.Tag as string;
if (elementTag != null && elementTag.Contains(this.ToggleContentTag as string))
{
this.toggleElements.Add(element);
break;
}
}
}
/// <summary>
/// Gets the first panel, which is a parent of this button
/// </summary>
/// <returns> first panel of the parents</returns>
private Panel GetFirstParentPanel()
{
FrameworkElement parentElement = this.Parent as FrameworkElement;
Panel parentPanel = parentElement as Panel;
while (parentPanel == null)
{
parentElement = parentElement.Parent as FrameworkElement;
if (parentElement == null)
{
break;
}
parentPanel = parentElement as Panel;
}
return parentPanel;
}
/// <summary>
/// Method toggle the visibility of a certain element
/// </summary>
/// <param name="element">element of the ToggleContent</param>
private void ToggleToggleContentElement(UIElement element)
{
if (element != null)
{
if (Visibility.Collapsed.Equals(element.Visibility))
{
this.ShowToggleContentElement(element);
}
else
{
this.HideToggleContentElement(element);
}
}
}
/// <summary>
/// Method show the visibility of a certain element
/// </summary>
/// <param name="element">element of the ToggleContent</param>
private void ShowToggleContentElement(UIElement element)
{
if (element != null)
{
element.Visibility = Visibility.Visible;
if (this.eventHandler == null)
{
this.eventHandler = new ToggleButtonHandler(this.HideToggleContent);
CloseButtonEvent += this.eventHandler;
}
}
}
/// <summary>
/// Method hide the visibility of a certain element
/// </summary>
/// <param name="element">element of the ToggleContent</param>
private void HideToggleContentElement(UIElement element)
{
if (element != null)
{
element.Visibility = Visibility.Collapsed;
if (this.eventHandler != null)
{
CloseButtonEvent -= this.eventHandler;
this.eventHandler = null;
}
}
}
#endregion
#endregion
}
}