using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;
using System.ComponentModel;
using System.Reflection;
namespace HisowaPopUpBehaviors
{
[System.ComponentModel.Description("Launches a Simple Popup on Event Trigger")]
public class HisowaSimplePopUpBehavior : TargetedTriggerAction<FrameworkElement>, INotifyPropertyChanged
{
private ChildWindow PopUp;
Grid _grid = new Grid();
//constructor
public HisowaSimplePopUpBehavior()
{ }
#region CustomParameterProperty
public static readonly DependencyProperty CustomParameterProperty = DependencyProperty.Register("CustomParameter", typeof(object), typeof(HisowaSimplePopUpBehavior), null);
public object CustomParameter
{
get
{
return base.GetValue(CustomParameterProperty);
}
set
{
base.SetValue(CustomParameterProperty, value);
}
}
#endregion
#region ReturnDialogResultCommandProperty
public static readonly DependencyProperty ReturnDialogResultCommandProperty = DependencyProperty.Register("ReturnDialogResultCommand", typeof(bool?), typeof(HisowaSimplePopUpBehavior), null);
public bool? ReturnDialogResultCommand
{
get
{
return (bool?)base.GetValue(ReturnDialogResultCommandProperty);
}
set
{
base.SetValue(ReturnDialogResultCommandProperty, value);
this.NotifyPropertyChanged("ReturnDialogResultCommand");
}
}
#endregion
#region ReturnICommandProperty
public static readonly DependencyProperty ReturnICommandProperty = DependencyProperty.Register("ReturnICommand", typeof(ICommand), typeof(HisowaSimplePopUpBehavior), null);
public ICommand ReturnICommand
{
get
{
return (ICommand)base.GetValue(ReturnICommandProperty);
}
set
{
base.SetValue(ReturnICommandProperty, value);
}
}
#endregion
#region PopUpMessageProperty
public static readonly DependencyProperty PopUpMessageProperty = DependencyProperty.Register("PopUpMessage", typeof(string), typeof(HisowaSimplePopUpBehavior), null);
public string PopUpMessage
{
get
{
if (base.GetValue(PopUpMessageProperty) == null)
{
return "Are you sure?";
}
else
{
return (string)base.GetValue(PopUpMessageProperty);
}
}
set
{
base.SetValue(PopUpMessageProperty, value);
}
}
#endregion
#region PopUpYesMessageProperty
public static readonly DependencyProperty PopUpYesMessageProperty = DependencyProperty.Register("PopUpYesMessage", typeof(string), typeof(HisowaSimplePopUpBehavior), null);
public string PopUpYesMessage
{
get
{
if (base.GetValue(PopUpYesMessageProperty) == null)
{
return "Yes";
}
else
{
return (string)base.GetValue(PopUpYesMessageProperty);
}
}
set
{
base.SetValue(PopUpYesMessageProperty, value);
}
}
#endregion
#region PopUpNoMessageProperty
public static readonly DependencyProperty PopUpNoMessageProperty = DependencyProperty.Register("PopUpNoMessage", typeof(string), typeof(HisowaSimplePopUpBehavior), null);
public string PopUpNoMessage
{
get
{
if (base.GetValue(PopUpNoMessageProperty) == null)
{
return "No";
}
else
{
return (string)base.GetValue(PopUpNoMessageProperty);
}
}
set
{
base.SetValue(PopUpNoMessageProperty, value);
}
}
#endregion
#region BackgroundColor
public static readonly DependencyProperty BackGroundColorParameterProperty = DependencyProperty.Register("BackGroundColorParameter", typeof(System.Windows.Media.Brush), typeof(HisowaSimplePopUpBehavior), null);
public System.Windows.Media.Brush BackGroundColorParameter
{
get
{
return (System.Windows.Media.Brush)base.GetValue(BackGroundColorParameterProperty);
}
set
{
base.SetValue(BackGroundColorParameterProperty, value);
}
}
#endregion
#region YesColor
public static readonly DependencyProperty YesColorParameterProperty = DependencyProperty.Register("YesColorParameter", typeof(System.Windows.Media.Brush), typeof(HisowaSimplePopUpBehavior), null);
public System.Windows.Media.Brush YesColorParameter
{
get
{
return (System.Windows.Media.Brush)base.GetValue(YesColorParameterProperty);
}
set
{
base.SetValue(YesColorParameterProperty, value);
}
}
#endregion
#region NoColor
public static readonly DependencyProperty NoColorParameterProperty = DependencyProperty.Register("NoColorParameter", typeof(System.Windows.Media.Brush), typeof(HisowaSimplePopUpBehavior), null);
public System.Windows.Media.Brush NoColorParameter
{
get
{
return (System.Windows.Media.Brush)base.GetValue(NoColorParameterProperty);
}
set
{
base.SetValue(NoColorParameterProperty, value);
}
}
#endregion
#region Invoke
//Shows popup on event trigger you set in designer
protected override void Invoke(object parameter)
{
ChildWindow _childWindow = new ChildWindow();
_grid = new Grid();
_grid.Width = 300;
_grid.Height = 100;
//width 3 cols
_grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
_grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
_grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
//height 3 rows
_grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });
_grid.RowDefinitions.Add(new RowDefinition());
_grid.RowDefinitions.Add(new RowDefinition());
//add message
TextBlock tbkMessage = new TextBlock();
tbkMessage.Text = PopUpMessage;
tbkMessage.SetValue(Grid.RowProperty, 0);
tbkMessage.SetValue(Grid.ColumnProperty, 0);
tbkMessage.SetValue(Grid.ColumnSpanProperty, 3);
_grid.Children.Add(tbkMessage);
//add Yes button
Button btnYes = new Button();
btnYes.Content = PopUpYesMessage;
btnYes.SetValue(Grid.ColumnProperty, 0);
btnYes.SetValue(Grid.RowProperty, 1);
btnYes.Name = "btnYes";
btnYes.Click += new RoutedEventHandler(btnYes_Click);
_grid.Children.Add(btnYes);
//add No Button
Button btnNo = new Button();
btnNo.Content = PopUpNoMessage;
btnNo.SetValue(Grid.ColumnProperty, 2);
btnNo.SetValue(Grid.RowProperty, 1);
btnNo.Name = "btnNo";
btnNo.Click += new RoutedEventHandler(btnNo_Click);
_grid.Children.Add(btnNo);
//style
_grid.Background = BackGroundColorParameter;
btnYes.Background = YesColorParameter;
btnNo.Background = NoColorParameter;
//Make it a PopUp
_childWindow.Content = _grid;
PopUp = _childWindow;
PopUp.Closing += new EventHandler<CancelEventArgs>(PopUp_Closing);
PopUp.Show();
}
#endregion
#region BtnClicks
void btnNo_Click(object sender, RoutedEventArgs e)
{
RemoveButtonHandlers();
PopUp.DialogResult = false;
}
void btnYes_Click(object sender, RoutedEventArgs e)
{
RemoveButtonHandlers();
PopUp.DialogResult = true;
}
private void RemoveButtonHandlers()
{
Button btnYes = (Button)_grid.FindName("btnYes");
btnYes.Click -= new RoutedEventHandler(btnYes_Click);
Button btnNo = (Button)_grid.FindName("btnNo");
btnNo.Click -= new RoutedEventHandler(btnNo_Click);
}
#endregion
#region ChildwindowClosing
//Runs an Icommand when the Popup is closing
//you can change what it passes to Icommand to whatever you like
//be sure that your method can consume them
void PopUp_Closing(object sender, CancelEventArgs e)
{
PopUp.Closing -= new EventHandler<CancelEventArgs>(PopUp_Closing);
ReturnDialogResultCommand = PopUp.DialogResult;
if (ReturnICommand != null)
{
HisowaSimplePopUpBehaviorResult _result = new HisowaSimplePopUpBehaviorResult();
_result.DialogResult = PopUp.DialogResult;
_result.DataContext = PopUp.DataContext;
_result.InputParameter = CustomParameter;
ReturnICommand.Execute(_result);
}
}
#endregion
// Utility
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
public class HisowaSimplePopUpBehaviorResult
{
public bool? DialogResult { get; set; }
public object DataContext { get; set; }
public object InputParameter { get; set; }
}
}