|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace AutoDiagrammer
{
public enum AsyncType { Content = 1, Busy, Error };
/// <summary>
/// A generic threading host container that supports content/busy/error controls
/// </summary>
public class AsyncHost : Grid
{
#region ShouldCollapse
/// <summary>
/// ShouldCollapse Dependency Property
/// </summary>
public static readonly DependencyProperty ShouldCollapseProperty =
DependencyProperty.Register("ShouldCollapse", typeof(bool), typeof(AsyncHost),
new FrameworkPropertyMetadata((bool)false));
/// <summary>
/// Gets or sets the ShouldCollapse property.
/// </summary>
public bool ShouldCollapse
{
get { return (bool)GetValue(ShouldCollapseProperty); }
set { SetValue(ShouldCollapseProperty, value); }
}
#endregion
#region AsyncState
public static readonly DependencyProperty AsyncStateProperty =
DependencyProperty.Register("AsyncState", typeof(AsyncType), typeof(AsyncHost),
new FrameworkPropertyMetadata((AsyncType)AsyncType.Content, new PropertyChangedCallback(OnAsyncStateChanged)));
public AsyncType AsyncState
{
get { return (AsyncType)GetValue(AsyncStateProperty); }
set { SetValue(AsyncStateProperty, value); }
}
private static void OnAsyncStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((AsyncHost)d).OnAsyncStateChanged(e);
}
protected virtual void OnAsyncStateChanged(DependencyPropertyChangedEventArgs e)
{
foreach (UIElement element in Children)
{
if (element.GetValue(AsyncHost.AsyncContentTypeProperty).Equals(e.NewValue))
element.Visibility = Visibility.Visible;
else
{
element.Visibility = ShouldCollapse ? Visibility.Collapsed : Visibility.Hidden;
}
}
}
#endregion
#region AsyncContentType
public static readonly DependencyProperty AsyncContentTypeProperty =
DependencyProperty.RegisterAttached("AsyncContentType", typeof(AsyncType), typeof(Control));
public static void SetAsyncContentType(UIElement element, AsyncType value)
{
element.SetValue(AsyncContentTypeProperty, value);
}
public static AsyncType GetAsyncContentType(UIElement element)
{
return (AsyncType)element.GetValue(AsyncContentTypeProperty);
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I currently hold the following qualifications (amongst others, I also studied Music Technology and Electronics, for my sins)
- MSc (Passed with distinctions), in Information Technology for E-Commerce
- BSc Hons (1st class) in Computer Science & Artificial Intelligence
Both of these at Sussex University UK.
Award(s)
I am lucky enough to have won a few awards for Zany Crazy code articles over the years
- Microsoft C# MVP 2016
- Codeproject MVP 2016
- Microsoft C# MVP 2015
- Codeproject MVP 2015
- Microsoft C# MVP 2014
- Codeproject MVP 2014
- Microsoft C# MVP 2013
- Codeproject MVP 2013
- Microsoft C# MVP 2012
- Codeproject MVP 2012
- Microsoft C# MVP 2011
- Codeproject MVP 2011
- Microsoft C# MVP 2010
- Codeproject MVP 2010
- Microsoft C# MVP 2009
- Codeproject MVP 2009
- Microsoft C# MVP 2008
- Codeproject MVP 2008
- And numerous codeproject awards which you can see over at my blog