258 lines
7.5 KiB
C#
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
|
|
}
|
|
}
|