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; } } } }