using Microsoft.Xaml.Behaviors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
namespace FLY.ControlLibrary
{
///
/// 后台添加功能,按钮按下 时 属性=true, 抬起属性=false
///
public class ResetAction2 : IDisposable
{
///
/// 对象
///
public object obj;
///
/// bool 属性
///
public string propertyname;
///
/// 按下时为 true
///
public bool pressIsTrue;
UIElement uIElement;
///
///
///
///
///
///
///
public ResetAction2(UIElement uIElement, object obj, string propertyname, bool pressIsTrue = true)
{
this.uIElement = uIElement;
this.obj = obj;
this.propertyname = propertyname;
this.pressIsTrue = pressIsTrue;
uIElement.PreviewMouseDown += UIElement_PreviewMouseDown;
uIElement.PreviewTouchDown += UIElement_PreviewTouchDown;
uIElement.PreviewMouseUp += UIElement_PreviewMouseUp;
uIElement.PreviewTouchUp += UIElement_PreviewTouchUp;
}
///
///
///
///
///
///
///
public ResetAction2(UIElement uIElement, string propertyname, bool pressIsTrue = true)
{
this.uIElement = uIElement;
this.propertyname = propertyname;
this.pressIsTrue = pressIsTrue;
uIElement.PreviewMouseDown += UIElement_PreviewMouseDown;
uIElement.PreviewTouchDown += UIElement_PreviewTouchDown;
uIElement.PreviewMouseUp += UIElement_PreviewMouseUp;
uIElement.PreviewTouchUp += UIElement_PreviewTouchUp;
}
public void Dispose()
{
uIElement.PreviewMouseDown -= UIElement_PreviewMouseDown;
uIElement.PreviewTouchDown -= UIElement_PreviewTouchDown;
uIElement.PreviewMouseUp -= UIElement_PreviewMouseUp;
uIElement.PreviewTouchUp -= UIElement_PreviewTouchUp;
}
private void UIElement_PreviewTouchUp(object sender, TouchEventArgs e)
{
Up();
}
private void UIElement_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
Up();
}
private void UIElement_PreviewTouchDown(object sender, TouchEventArgs e)
{
Down();
}
private void UIElement_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Down();
}
bool IsObjNull()
{
if (obj == null)
{
if (uIElement is FrameworkElement)
{
obj = (uIElement as FrameworkElement).DataContext;
if (obj == null)
return true;
}
else
{
return true;
}
}
return false;
}
void Down()
{
if (IsObjNull()) return;
if (pressIsTrue)
Misc.PropertiesManager.SetValue(obj, propertyname, true);
else
Misc.PropertiesManager.SetValue(obj, propertyname, false);
}
void Up()
{
if (IsObjNull()) return;
if (pressIsTrue)
Misc.PropertiesManager.SetValue(obj, propertyname, false);
else
Misc.PropertiesManager.SetValue(obj, propertyname, true);
}
}
///
/// ResetAction2 的 XAML 版 ,附加行为。
/// 与 NoToggleButton 控件 一起使用
///
public class ResetBehavior : Behavior
{
public System.Windows.Data.Binding Binding { get; set; }
ResetAction2 resetAction = null;
public ResetBehavior()
{
}
protected override void OnAttached()
{
base.OnAttached();
UIElement dobj = AssociatedObject;
if (Binding != null && Binding.Path != null)
{
if (Binding.Source != null)
{
resetAction = new ResetAction2(dobj, Binding.Source, Binding.Path.Path);
}
else
{
var obj = COMMON.GetDataContext(dobj);
if (obj == null)
{
resetAction = new ResetAction2(dobj, Binding.Path.Path);
}
else
{
resetAction = new ResetAction2(dobj, obj, Binding.Path.Path);
}
}
}
}
protected override void OnDetaching()
{
base.OnDetaching();
if (resetAction != null)
{
resetAction.Dispose();
resetAction = null;
}
}
}
}