WPF上位機 - 使用轉換器實現TIA Wincc中的可見性和外觀功能

4LPH4_αX發表於2024-05-03

在TIA Wincc 中有這樣的功能,使用True or false 控制控制元件的可見性或者外觀的情況。

在上位機中需要使用轉換器這樣對True or false 值轉換為 需要的筆刷或者Visible屬性。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows.Media;

namespace SiemensAxisControl.Model.Converter
{
    public class BoolToBrushConverter : IValueConverter
    {
        public object Convert(object value , Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null && bool.Parse(value.ToString()))
            {
                return new SolidColorBrush(Color.FromRgb(0,255,0));
            }
            return Brushes.White;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

還有一種情況,不是True or false 的布林值,而是根據整形值的情況改變控制元件的可見性或者外觀。
如在TIA中以下的情況

  • 變數值等於某一個值改變外觀

  • 變數值在某一個區間內改變外觀

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;

namespace SiemensAxisControl.Model.Converter
{
    internal class IntToBrushConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 嘗試將引數解析為兩個整數值,分別代表下限和上限
            if (parameter != null && parameter.ToString().Split('-').Length == 2 &&
                int.TryParse(parameter.ToString().Split('-')[0], out int lowerBound) &&
                int.TryParse(parameter.ToString().Split('-')[1], out int upperBound))
            {
                if(value.GetType() == typeof(short) )
                {
                    // 檢查傳入的值是否在指定的範圍內
                    if (value is short intValue &&  intValue >= lowerBound && intValue <= upperBound)
                    {
                        return new SolidColorBrush(Color.FromRgb(0, 255, 0)); ;
                    }
                }
                else if (value.GetType() == typeof(int))
                 {
                    // 檢查傳入的值是否在指定的範圍內
                    if (value is int intValue && intValue >= lowerBound && intValue <= upperBound)
                    {
                        return new SolidColorBrush(Color.FromRgb(0, 255, 0)); ;
                    }
                }
                
            }
            // 如果不滿足條件,則預設為白色
            return Brushes.White;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

相關文章