1

我想使用 WPF DataTrigger 来检查大于 X 的值。我知道这只能通过 IValueConverter 实现。我为此找到了许多 C# 示例,但我在 powershell 中需要它。有人可以帮我把它翻译成powershell吗?

要翻译的 C# 代码:

public class CutoffConverter : IValueConverter {
    public object ConvertTo(object obj, Type type) {
        return ((int)obj) > Cutoff;
    }

    public object ConvertFrom(object obj, Type type) {
        throw new NotImplementedException();
    }

    public int Cutoff { get; set; }
}

和 XAML

<Window.Resources>
    <myNamespace:CutoffConverter x:Key="AgeConverter"/>
</Window.Resources>

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Age,
                           Converter={StaticResource AgeConverter},
                           ConverterParameter=30}">
        <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
    </DataTrigger>
</DataTemplate.Triggers>
4

1 回答 1

2

当然:

$src = @'
using System;
using System.Globalization;
using System.Windows.Data;

namespace MyNamespace
{
    public class CutoffConverter : IValueConverter
    {
        public int Cutoff { get; set; }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((int)value) > Cutoff;
        }

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

Add-Type -AssemblyName PresentationFramework    
Add-Type -TypeDefinition $src -ReferencedAssemblies PresentationFramework

您可以通过这种方式添加大多数 C# 代码。而且您几乎需要使用 C#,因为 AFAIK 您无法在 PowerShell 脚本中实现接口。它更像是一种 CLI 消费者语言,而不是生产者语言。

于 2013-01-11T16:45:12.610 回答