using BPASmartClient.Compiler; using BPASmartClient.DATABUS; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; namespace BPASmartClient.SCADAControl.CustomerControls { /// /// 常用button /// TheButton.xaml 的交互逻辑 /// public partial class TheButton : Button, IExecutable { public TheButton() { InitializeComponent(); ResourceDictionary languageResDic = new ResourceDictionary(); languageResDic.Source = new Uri(@"/BPASmartClient.SCADAControl;component/Themes/Generic.xaml",UriKind.RelativeOrAbsolute); this.Resources.MergedDictionaries.Add(languageResDic); Content = "按钮"; Width = 80; Height = 30; } public string ControlType => "控件"; private bool isExecuteState; public bool IsExecuteState { get { return isExecuteState; } set { isExecuteState = value; if (IsExecuteState) { Register(); } } } [Category("事件")] public string ClickExec { get { return (string)GetValue(ClickExecProperty); } set { SetValue(ClickExecProperty, value); } } public static readonly DependencyProperty ClickExecProperty = DependencyProperty.Register("ClickExec", typeof(string), typeof(TheButton), new PropertyMetadata(string.Empty)); private void MyButton_Click(object sender, RoutedEventArgs e) { Config.GetInstance().RunJsScipt(ClickExec); } #region 数据绑定模块 [Category("数据绑定-数据来源")] public int TimeCount { get { return (int)GetValue(TimeCountProperty); } set { SetValue(TimeCountProperty,value); } } public static readonly DependencyProperty TimeCountProperty = DependencyProperty.Register("TimeCount",typeof(int),typeof(TheButton),new PropertyMetadata(5)); public event EventHandler PropertyChange; //声明一个事件 /// /// 属性刷新器 /// DispatcherTimer timer = new DispatcherTimer(); /// /// 属性绑定变量集合 /// Dictionary propertyBing = new Dictionary(); /// /// 运行事件 /// public void Register() { this.Click += MyButton_Click; PropertyInfo[] propertyInfos = this.GetType().GetProperties(); foreach (PropertyInfo propertyInfo in propertyInfos) { var propName = propertyInfo?.GetValue(this,null); if (propName is string && propName != null && propName.ToString().Contains("Binding ") && propName.ToString().Contains(".")) { propertyBing[propertyInfo.Name] = propName.ToString(); } } timer.Interval = TimeSpan.FromMilliseconds(TimeCount); timer.Tick += Timer_Tick; ; timer.Start(); } /// /// 属性刷新事件 /// /// /// private void Timer_Tick(object? sender,EventArgs e) { try { foreach (var item in propertyBing) { //{Binding 测试设备.VAR_A_2} string[] str = item.Value.Replace("{Binding ","").Replace("}","").Split("."); if (str.Length > 1) { if (Class_DataBus.GetInstance().Dic_DeviceData.ContainsKey(str[0])) { Dictionary b = Class_DataBus.GetInstance().Dic_DeviceData[str[0]]; if (b != null && b.ContainsKey(str[1])) { object _value = b[str[1]].VarVaule; this.GetType().GetProperty(item.Key).SetValue(this,_value); } } } } } catch (Exception ex) { } } #endregion } }