using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone
|
{
|
/// <summary>
|
/// 做成一个点击后能够显示点击状态的控件(基层控件)
|
/// </summary>
|
public class FrameLayoutStatuControl : FrameLayoutBase
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 状态设置的事件(会重载底层效果)
|
/// </summary>
|
public Action<bool> SelectStatuEvent;
|
/// <summary>
|
/// 是否启用点亮功能(默认启用)
|
/// </summary>
|
public bool UseClickStatu = true;
|
/// <summary>
|
/// 原来的背景色
|
/// </summary>
|
private uint oldBackColor = 0;
|
/// <summary>
|
/// 当前是否已经处于选择状态
|
/// </summary>
|
private bool IsSelectStatu = false;
|
/// <summary>
|
/// 子控件Y轴偏移量(共通定义而已)
|
/// </summary>
|
public int chidrenYaxis = 0;
|
/// <summary>
|
/// 圆角度
|
/// </summary>
|
public int RadiusEx
|
{
|
set { this.Radius = (uint)Application.GetRealHeight(value); }
|
}
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 做成一个点击后能够显示点击状态的控件
|
/// </summary>
|
/// <param name="i_ChidrenYaxis">子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可)</param>
|
public FrameLayoutStatuControl(int i_ChidrenYaxis = 0)
|
{
|
this.chidrenYaxis = i_ChidrenYaxis;
|
|
//置空底层的事件
|
this.MouseUpEventHandler = null;
|
this.MouseUpEventHandler += ChildrenUpEvent;
|
this.MouseDownEventHandler += ChildrenDownEvent;
|
}
|
|
#endregion
|
|
#region ■ 绑定事件___________________________
|
|
/// <summary>
|
/// 变更子控件的绑定模式
|
/// </summary>
|
/// <param name="view">子控件</param>
|
/// <param name="chidrenBindMode">变更的绑定模式</param>
|
public void ChangedChidrenBindMode(View view, ChidrenBindMode chidrenBindMode)
|
{
|
if (view is ButtonBase)
|
{
|
//子控件移除事件
|
ButtonBase button = (ButtonBase)view;
|
button.ButtonClickEvent -= ChildrenUpEvent;
|
button.MouseDownEventHandler -= ChildrenDownEvent;
|
|
this.BindChidrenEvent(view, chidrenBindMode);
|
}
|
else if (view is ImageView)
|
{
|
view.MouseUpEventHandler -= ChildrenUpEvent;
|
view.MouseDownEventHandler -= ChildrenDownEvent;
|
|
this.BindChidrenEvent(view, chidrenBindMode);
|
}
|
else if (view is ViewGroup)
|
{
|
ViewGroup groupContr = (ViewGroup)view;
|
for (int i = 0; i < groupContr.ChildrenCount; i++)
|
{
|
var myView = groupContr.GetChildren(i);
|
if (myView == null)
|
{
|
break;
|
}
|
if (myView is ButtonBase)
|
{
|
//子控件移除事件
|
ButtonBase button = (ButtonBase)myView;
|
button.ButtonClickEvent -= ChildrenUpEvent;
|
button.MouseDownEventHandler -= ChildrenDownEvent;
|
}
|
}
|
//自身移除事件
|
groupContr.MouseUpEventHandler -= ChildrenUpEvent;
|
groupContr.MouseDownEventHandler -= ChildrenDownEvent;
|
|
this.BindChidrenEvent(view, chidrenBindMode);
|
}
|
}
|
|
/// <summary>
|
/// 绑定子控件事件(如果是复合控件,在初始化完成后,调用ChangedChidrenBindMode)
|
/// </summary>
|
/// <param name="view"></param>
|
/// <param name="chidrenBindMode"></param>
|
private void BindChidrenEvent(View view, ChidrenBindMode chidrenBindMode)
|
{
|
if (chidrenBindMode == ChidrenBindMode.NotBind)
|
{
|
return;
|
}
|
if (view is ButtonBase)
|
{
|
//为子控件添加事件
|
ButtonBase button = (ButtonBase)view;
|
button.ButtonClickEvent -= ChildrenUpEvent;
|
button.MouseDownEventHandler -= ChildrenDownEvent;
|
|
button.ButtonClickEvent += ChildrenUpEvent;
|
button.MouseDownEventHandler += ChildrenDownEvent;
|
}
|
else if (view is ImageView)
|
{
|
//自身也添加事件
|
view.MouseUpEventHandler -= ChildrenUpEvent;
|
view.MouseDownEventHandler -= ChildrenDownEvent;
|
|
view.MouseUpEventHandler += ChildrenUpEvent;
|
view.MouseDownEventHandler += ChildrenDownEvent;
|
}
|
else if (view is ViewGroup)
|
{
|
//为子控件添加事件
|
ViewGroup groupContr = (ViewGroup)view;
|
for (int i = 0; i < groupContr.ChildrenCount; i++)
|
{
|
var myView = groupContr.GetChildren(i);
|
if (myView == null)
|
{
|
break;
|
}
|
if (myView is ButtonBase)
|
{
|
//为子控件添加事件
|
ButtonBase button = (ButtonBase)myView;
|
button.ButtonClickEvent -= ChildrenUpEvent;
|
button.MouseDownEventHandler -= ChildrenDownEvent;
|
|
button.ButtonClickEvent += ChildrenUpEvent;
|
button.MouseDownEventHandler += ChildrenDownEvent;
|
}
|
}
|
//自身也添加事件
|
groupContr.MouseUpEventHandler -= ChildrenUpEvent;
|
groupContr.MouseDownEventHandler -= ChildrenDownEvent;
|
|
groupContr.MouseUpEventHandler += ChildrenUpEvent;
|
groupContr.MouseDownEventHandler += ChildrenDownEvent;
|
}
|
}
|
|
#endregion
|
|
#region ■ 添加子控件_________________________
|
|
/// <summary>
|
/// 添加子控件
|
/// </summary>
|
/// <param name="view">子控件</param>
|
/// <param name="chidrenBindMode">绑定模式</param>
|
public void AddChidren(View view, ChidrenBindMode chidrenBindMode = ChidrenBindMode.BindEvent)
|
{
|
this.oldBackColor = this.BackgroundColor;
|
|
base.AddChidren(view);
|
|
//绑定子控件事件
|
this.BindChidrenEvent(view, chidrenBindMode);
|
}
|
|
/// <summary>
|
/// 添加子控件
|
/// </summary>
|
/// <param name="view"></param>
|
public override void AddChidren(View view)
|
{
|
this.AddChidren(view, ChidrenBindMode.NotBind);
|
}
|
|
#endregion
|
|
#region ■ 控件事件___________________________
|
|
/// <summary>
|
/// 点击按下事件(点亮)
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="e">E.</param>
|
private void ChildrenDownEvent(object sender, MouseEventArgs e)
|
{
|
if (this.UseClickStatu == false || this.CanClick == false)
|
{
|
return;
|
}
|
this.StartSelectStatuAppeal(HdlControlResourse.StatuChangedWaitTime);
|
}
|
|
/// <summary>
|
/// 点击松开事件
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="e">E.</param>
|
private void ChildrenUpEvent(object sender, MouseEventArgs e)
|
{
|
if (this.CanClick == false)
|
{
|
//不允许点击
|
return;
|
}
|
if (sender is FrameLayoutStatuControl)
|
{
|
//LOG出力
|
this.WriteLog();
|
}
|
try
|
{
|
//调用委托
|
ButtonClickEvent?.Invoke(sender, e);
|
}
|
catch (Exception ex)
|
{
|
//出现未知错误
|
var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
|
alert.Show();
|
//Log出力
|
HdlLogLogic.Current.WriteLog(ex);
|
}
|
}
|
|
#endregion
|
|
#region ■ 单击状态显示_______________________
|
|
/// <summary>
|
/// 设置单击后结束的状态
|
/// </summary>
|
public void SetClickNotSelectStatu()
|
{
|
this.IsSelectStatu = false;
|
if (this.SelectStatuEvent != null)
|
{
|
this.SelectStatuEvent(false);
|
return;
|
}
|
|
this.BackgroundColor = this.oldBackColor;
|
}
|
|
/// <summary>
|
/// 设置单击时的状态
|
/// </summary>
|
public void SetClickSelectStatu()
|
{
|
this.IsSelectStatu = true;
|
if (this.SelectStatuEvent != null)
|
{
|
this.SelectStatuEvent(true);
|
return;
|
}
|
|
this.BackgroundColor = UserCenterColor.Current.RowSelectBackColor;
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 强制实施控件选中状态的特效
|
/// </summary>
|
/// <param name="waiTime"></param>
|
public void StartSelectStatuAppeal(int waiTime)
|
{
|
if (this.IsSelectStatu == true)
|
{
|
return;
|
}
|
this.IsSelectStatu = true;
|
|
//设置选择状态
|
this.SetClickSelectStatu();
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
System.Threading.Thread.Sleep(waiTime);
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//设置不选择状态
|
this.SetClickNotSelectStatu();
|
});
|
});
|
}
|
|
/// <summary>
|
/// 移除底层控件自身的单击事件
|
/// </summary>
|
public void RemoveBaseClickEvent()
|
{
|
this.MouseUpEventHandler -= ChildrenUpEvent;
|
this.MouseDownEventHandler -= ChildrenDownEvent;
|
}
|
|
/// <summary>
|
/// 控件摧毁
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
this.SelectStatuEvent = null;
|
|
base.RemoveFromParent();
|
}
|
|
#endregion
|
|
#region ■ Log出力____________________________
|
|
/// <summary>
|
/// Log出力
|
/// </summary>
|
private void WriteLog()
|
{
|
if (formName == null)
|
{
|
formName = string.Empty;
|
View myView = this.Parent;
|
for (; ; )
|
{
|
if (myView == null)
|
{
|
break;
|
}
|
else if (myView is CommonFormBase)
|
{
|
formName = ((CommonFormBase)myView).FormID;
|
break;
|
}
|
myView = myView.Parent;
|
}
|
}
|
HdlLogLogic.Current.WriteLog(1, formName + ".FrameLayoutControl 被点击");
|
}
|
|
#endregion
|
}
|
}
|