Commit 3cb0dbf0 authored by 潘栩锋's avatar 潘栩锋 🚴

添加 FLY.ControlLibrary 添加 ToggleAction 动作行为 behavior

parent 993e371a
...@@ -87,6 +87,7 @@ ...@@ -87,6 +87,7 @@
<Compile Include="PieChart.xaml.cs"> <Compile Include="PieChart.xaml.cs">
<DependentUpon>PieChart.xaml</DependentUpon> <DependentUpon>PieChart.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="ToggleAction.cs" />
<Compile Include="ResetAction.cs" /> <Compile Include="ResetAction.cs" />
<Compile Include="UI.OSK\IVirtualKeyboard.cs" /> <Compile Include="UI.OSK\IVirtualKeyboard.cs" />
<Compile Include="UI.OSK\KeyboardBehavior.cs" /> <Compile Include="UI.OSK\KeyboardBehavior.cs" />
......
...@@ -136,7 +136,7 @@ namespace FLY.ControlLibrary ...@@ -136,7 +136,7 @@ namespace FLY.ControlLibrary
/// <summary> /// <summary>
/// ResetAction2 的 XAML 版 ,附加行为。 /// ResetAction2 的 XAML 版 ,附加行为。
/// 还没完成 /// 与 NoToggleButton 控件 一起使用
/// </summary> /// </summary>
public class ResetBehavior : Behavior<UIElement> public class ResetBehavior : Behavior<UIElement>
{ {
......
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
{
/// <summary>
/// 后台添加功能,按钮按下 会切换 属性 状态, true变false,false 变true
/// </summary>
public class ToggleAction : IDisposable
{
/// <summary>
/// 对象
/// </summary>
public object obj;
/// <summary>
/// bool 属性
/// </summary>
public string propertyname;
UIElement uIElement;
/// <summary>
///
/// </summary>
/// <param name="uIElement"></param>
/// <param name="obj"></param>
/// <param name="propertyname"></param>
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;
}
/// <summary>
///
/// </summary>
/// <param name="uIElement"></param>
/// <param name="propertyname"></param>
public ToggleAction(UIElement uIElement, string propertyname) : this(uIElement, null, propertyname)
{
}
/// <summary>
///
/// </summary>
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);
}
}
/// <summary>
/// ToggleAction 的 XAML 版 ,附加行为。
/// 与 NoToggleButton 控件 一起使用
/// </summary>
public class ToggleBehavior : Behavior<UIElement>
{
/// <summary>
///
/// </summary>
public System.Windows.Data.Binding Binding { get; set; }
ToggleAction toggleAction = null;
/// <summary>
///
/// </summary>
public ToggleBehavior()
{
}
/// <summary>
///
/// </summary>
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);
}
}
}
}
/// <summary>
///
/// </summary>
protected override void OnDetaching()
{
base.OnDetaching();
if (toggleAction != null)
{
toggleAction.Dispose();
toggleAction = null;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment