在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();
}
}
}