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,false 变true
///
public class ToggleAction : IDisposable
{
///
/// 对象
///
public object obj;
///
/// bool 属性
///
public string propertyname;
UIElement uIElement;
///
///
///
///
///
///
public ToggleAction(UIElement uIElement, object obj, string propertyname)
{
this.uIElement = uIElement;
this.obj = obj;
this.propertyname = propertyname;
uIElement.PreviewMouseDown += UIElement_PreviewMouseDown;
uIElement.PreviewTouchDown += UIElement_PreviewTouchDown;
}
///
///
///
///
///
public ToggleAction(UIElement uIElement, string propertyname) : this(uIElement, null, propertyname)
{
}
///
///
///
public void Dispose()
{
uIElement.PreviewMouseDown -= UIElement_PreviewMouseDown;
uIElement.PreviewTouchDown -= UIElement_PreviewTouchDown;
}
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;
var value = Misc.PropertiesManager.GetValue(obj, propertyname);
var v = (bool)value;
if (v)
Misc.PropertiesManager.SetValue(obj, propertyname, false);
else
Misc.PropertiesManager.SetValue(obj, propertyname, true);
}
}
///
/// ToggleAction 的 XAML 版 ,附加行为。
/// 与 NoToggleButton 控件 一起使用
///
public class ToggleBehavior : Behavior
{
///
///
///
public System.Windows.Data.Binding Binding { get; set; }
ToggleAction toggleAction = null;
///
///
///
public ToggleBehavior()
{
}
///
///
///
protected override void OnAttached()
{
base.OnAttached();
UIElement dobj = AssociatedObject;
if (Binding != null && Binding.Path != null)
{
if (Binding.Source != null)
{
toggleAction = new ToggleAction(dobj, Binding.Source, Binding.Path.Path);
}
else
{
var obj = COMMON.GetDataContext(dobj);
if (obj == null)
{
toggleAction = new ToggleAction(dobj, Binding.Path.Path);
}
else
{
toggleAction = new ToggleAction(dobj, obj, Binding.Path.Path);
}
}
}
}
///
///
///
protected override void OnDetaching()
{
base.OnDetaching();
if (toggleAction != null)
{
toggleAction.Dispose();
toggleAction = null;
}
}
}
}