using Shared;
using System;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.Stan
{
///
/// 做成一个点击后能够显示点击状态的控件(基层控件)
///
public class FrameLayoutStatuControl : FrameLayoutBase
{
#region ■ 变量声明___________________________
///
/// 状态设置的事件(会重载底层效果)
///
public Action SelectStatuEvent;
///
/// 子控件Y轴偏移量(共通定义而已)
///
public int chidrenYaxis = 0;
#endregion
#region ■ 初始化_____________________________
///
/// 做成一个点击后能够显示点击状态的控件
///
/// 子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可)
public FrameLayoutStatuControl(int i_ChidrenYaxis = 0)
{
this.chidrenYaxis = i_ChidrenYaxis;
//置空底层的事件
this.MouseUpEventHandler = null;
this.MouseUpEventHandler += ChildrenUpEvent;
}
#endregion
#region ■ 绑定事件___________________________
///
/// 变更子控件的绑定模式
///
/// 子控件
/// 变更的绑定模式
public void ChangedChidrenBindMode(View view, ChidrenBindMode chidrenBindMode)
{
if (view is ButtonCtrBase)
{
//子控件移除事件
ButtonCtrBase button = (ButtonCtrBase)view;
button.ButtonClickEvent -= ChildrenUpEvent;
this.BindChidrenEvent(view, chidrenBindMode);
}
else if (view is ImageView)
{
view.MouseUpEventHandler -= ChildrenUpEvent;
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 ButtonCtrBase)
{
//子控件移除事件
ButtonCtrBase button = (ButtonCtrBase)myView;
button.ButtonClickEvent -= ChildrenUpEvent;
}
}
//自身移除事件
groupContr.MouseUpEventHandler -= ChildrenUpEvent;
this.BindChidrenEvent(view, chidrenBindMode);
}
}
///
/// 绑定子控件事件(如果是复合控件,在初始化完成后,调用ChangedChidrenBindMode)
///
///
///
private void BindChidrenEvent(View view, ChidrenBindMode chidrenBindMode)
{
if (chidrenBindMode == ChidrenBindMode.NotBind)
{
return;
}
if (view is ButtonCtrBase)
{
//为子控件添加事件
ButtonCtrBase button = (ButtonCtrBase)view;
button.ButtonClickEvent -= ChildrenUpEvent;
button.ButtonClickEvent += ChildrenUpEvent;
}
else if (view is ImageView || view is Button)
{
//为子控件添加事件
view.MouseUpEventHandler -= ChildrenUpEvent;
view.MouseUpEventHandler += ChildrenUpEvent;
}
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 ButtonCtrBase)
{
//为子控件添加事件
ButtonCtrBase button = (ButtonCtrBase)myView;
button.ButtonClickEvent -= ChildrenUpEvent;
button.ButtonClickEvent += ChildrenUpEvent;
}
}
//自身也添加事件
groupContr.MouseUpEventHandler -= ChildrenUpEvent;
groupContr.MouseUpEventHandler += ChildrenUpEvent;
}
}
#endregion
#region ■ 添加子控件_________________________
///
/// 添加子控件
///
/// 子控件
/// 绑定模式
public void AddChidren(View view, ChidrenBindMode chidrenBindMode)
{
base.AddChidren(view);
//绑定子控件事件
this.BindChidrenEvent(view, chidrenBindMode);
}
///
/// 添加子控件
///
///
public override void AddChidren(View view)
{
this.AddChidren(view, ChidrenBindMode.NotBind);
}
#endregion
#region ■ 控件事件___________________________
///
/// 点击松开事件
///
/// Sender.
/// E.
private void ChildrenUpEvent(object sender, MouseEventArgs e)
{
if (this.CanClick == false)
{
//不允许点击
return;
}
try
{
//调用委托
ButtonClickEvent?.Invoke(sender, e);
}
catch (Exception ex)
{
//出现未知错误
HdlMessageLogic.Current.ShowAppProgramIsError(ex);
}
}
#endregion
#region ■ 一般方法___________________________
///
/// 移除底层控件自身的单击事件
///
public void RemoveBaseClickEvent()
{
this.MouseUpEventHandler -= ChildrenUpEvent;
}
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
this.SelectStatuEvent = null;
base.RemoveFromParent();
}
#endregion
}
}