C# 如果该值等于或大于该值,则将工作的WPF触发器
我用WPF编写了一个应用程序,它有一个按钮和滑块。我想为按钮创建一个触发器,当滑块值大于另一个值时,它会将按钮的“IsEnable”属性设置为false。 现在我有:C# 如果该值等于或大于该值,则将工作的WPF触发器,c#,wpf,visual-studio-2010,triggers,C#,Wpf,Visual Studio 2010,Triggers,我用WPF编写了一个应用程序,它有一个按钮和滑块。我想为按钮创建一个触发器,当滑块值大于另一个值时,它会将按钮的“IsEnable”属性设置为false。 现在我有: <Style x:Key="zoomOutButton" TargetType="Button" BasedOn="{StaticResource ResourceKey=buttonStyle}"> <Style.Triggers> <DataTrigger
<Style x:Key="zoomOutButton" TargetType="Button" BasedOn="{StaticResource ResourceKey=buttonStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentAltitude}" Value="24000">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
但是我想设置isEnable不是在CurrentAltitude的值等于24000时,而是在它等于或大于24000时。
有什么想法吗?您可以使用转换器实现这一点:
public class IsEqualOrGreaterThanConverter : IValueConverter {
public static readonly IValueConverter Instance = new IsEqualOrGreaterThanConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
int intValue = (int) value;
int compareToValue = (int) parameter;
return intValue >= compareToValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
那么您的触发器将如下所示:
<Style x:Key="zoomOutButton" TargetType="Button" BasedOn="{StaticResource ResourceKey=buttonStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentAltitude, Converter={x:Static my:IsEqualOrGreaterThanConverter.Instance}, ConverterParameter=24000}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
一种更通用的转换器,可用于任何类似类型,可以是:
public class IsGreaterOrEqualThanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
IComparable v = value as IComparable;
IComparable p = parameter as IComparable;
if (v == null || p == null)
throw new FormatException("to use this converter, value and parameter shall inherit from IComparable");
return (v.CompareTo(p) >= 0);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是在这种情况下,必须使用与传输到转换器的值相同的类型来解释ConverterParameter。例如,在XAML中,要将int属性“MyIntProperty”与contant int值1进行比较,可以使用以下语法:
<UserControl x:Class="MyNamespace.MyControl"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:genconverters="clr-namespace:MyConverterNamespace;assembly=MyConvertersAssembly">
<Grid>
<Grid.Resources>
<genconverters:IsGreaterOrEqualThanConverter x:Key="IsEqualOrGreaterThanConverter"/>
<sys:Int32 x:Key="Int1">1</sys:Int32>
</Grid.Resources>
<ComboBox IsEnabled="{Binding MyIntProperty,
Converter={StaticResource IsEqualOrGreaterThanConverter},
ConverterParameter={StaticResource Int1}}"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"/>
</Grid>
1.
从转换器中返回布尔值的复本并检查它,该死的尼斯:嗨-每当我尝试并实现这一点时,我会得到一个错误:IsEqualOrGreaterThanConverter在Windows演示基金会(WPF)项目中不受支持。我已将该类放置在MainWindow.xaml.cs文件中,但我必须有一些不符合排序的内容。我必须将其更改为此,以避免无效的强制转换错误:Int32.Parse((string)参数)-我想知道这行代码的用途是什么:
publicstatic readonly IValueConverter Instance=new isequalgreaterthanconverter()代码>我以前在查看转换器时没有见过它,仅此而已。