All the controls missing in WPF. Over 1 million downloads.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
6.3 KiB

/**************************************************************************************
Toolkit for WPF
Copyright (C) 2007-2025 Xceed Software Inc.
This program is provided to you under the terms of the XCEED SOFTWARE, INC.
COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at
https://github.com/xceedsoftware/wpftoolkit/blob/master/license.md
For more features, controls, and fast professional support,
pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
**************************************************************************************/
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
#if !OPEN_SOURCE
using System.Windows.Input;
using System.Windows.Media.Animation;
using Xceed.Wpf.Toolkit.MaterialControls;
#endif
namespace Xceed.Wpf.Toolkit.LiveExplorer.Samples.MaterialControls.Views
{
/// <summary>
/// Interaction logic for MaterialControlsView.xaml
/// </summary>
public partial class MaterialControlsView : MaterialDemoView
{
#if !OPEN_SOURCE
#region Members
private Storyboard _toastStoryboard = new Storyboard();
private Random _rand = new Random();
private List<MaterialToast> _toastList = new List<MaterialToast>();
#endregion
#endif
#region Constructors
public MaterialControlsView()
{
InitializeComponent();
}
#endregion
#if !OPEN_SOURCE
#region Private Methods
private int GetRandomInteger( int max )
{
return _rand.Next( max );
}
private void PopToast()
{
MaterialAccentEnum accent;
MaterialToastLocationEnum location;
string text;
switch( this.GetRandomInteger( 8 ) )
{
case 0:
accent = MaterialAccentEnum.Blue;
break;
case 1:
accent = MaterialAccentEnum.LightBlue;
break;
case 2:
accent = MaterialAccentEnum.Cyan;
break;
case 3:
accent = MaterialAccentEnum.Teal;
break;
case 4:
accent = MaterialAccentEnum.Green;
break;
case 5:
accent = MaterialAccentEnum.LightGreen;
break;
case 6:
accent = MaterialAccentEnum.Lime;
break;
default:
accent = MaterialAccentEnum.Yellow;
break;
}
switch( this.GetRandomInteger( 6 ) )
{
case 0:
location = MaterialToastLocationEnum.Bottom;
break;
case 1:
location = MaterialToastLocationEnum.BottomLeft;
break;
case 2:
location = MaterialToastLocationEnum.BottomRight;
break;
case 3:
location = MaterialToastLocationEnum.Top;
break;
case 4:
location = MaterialToastLocationEnum.TopLeft;
break;
default:
location = MaterialToastLocationEnum.TopRight;
break;
}
switch( this.GetRandomInteger( 6 ) )
{
case 0:
text = "Warning";
break;
case 1:
text = "New Appointments";
break;
case 2:
text = "New Mail";
break;
case 3:
text = "New Message";
break;
case 4:
text = "Times Up!";
break;
default:
text = "Task Completed!";
break;
}
var materialToast = new MaterialToast( _toastGrid );
materialToast.MaterialAccent = accent;
materialToast.Location = location;
materialToast.Content = text;
materialToast.DisplayTime = System.TimeSpan.FromMilliseconds( 3000 );
materialToast.HideCompleted += this.MaterialToast_HideCompleted;
_toastList.Add( materialToast );
materialToast.ShowToast();
}
private void StartToastCircularProgressBar()
{
Storyboard storyboard = new Storyboard();
var valueAnim = new DoubleAnimation( 0d, 100d, System.TimeSpan.FromMilliseconds( 3000 ) );
Storyboard.SetTarget( valueAnim, _toastProgressBarCircular );
Storyboard.SetTargetProperty( valueAnim, new PropertyPath( MaterialProgressBarCircular.ValueProperty ) );
storyboard.Children.Add( valueAnim );
storyboard.Completed += this.ToastCircularPropgressBarAnimation_Completed;
storyboard.Begin( _toastProgressBarCircular );
}
#endregion
#region Event Handlers
private void MaterialProgressBar_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
{
var progressBar = sender as MaterialProgressBarBase;
if( progressBar != null )
{
var storyboard = new Storyboard();
// Animate ProgressBar
var valueAnim = new DoubleAnimation( progressBar.Minimum, progressBar.Maximum, System.TimeSpan.FromMilliseconds( 4000 ) );
Storyboard.SetTarget( valueAnim, progressBar );
Storyboard.SetTargetProperty( valueAnim, new PropertyPath( MaterialProgressBarBase.ValueProperty ) );
storyboard.Children.Add( valueAnim );
storyboard.Begin( this );
}
}
private void MaterialTabControl_SelectionChanged( object sender, SelectionChangedEventArgs e )
{
var materialTabItem = e.AddedItems[ 0 ] as MaterialTabItem;
if( ( materialTabItem != null ) && materialTabItem.Equals( _materialTabItem5 ) )
{
this.StartToastCircularProgressBar();
}
else
{
foreach( var toast in _toastList )
{
toast.HideToast();
}
}
}
private void MaterialToast_HideCompleted( object sender, RoutedEventArgs e )
{
_toastList.Remove( sender as MaterialToast );
}
private void MaterialToastButton_Click( object sender, RoutedEventArgs e )
{
this.PopToast();
}
private void ToastCircularPropgressBarAnimation_Completed( object sender, EventArgs e )
{
if( _materialTabControl.SelectedItem.Equals( _materialTabItem5 ) )
{
this.PopToast();
this.StartToastCircularProgressBar();
}
}
#endregion
#endif
}
}