2011-02-03 6 views
8

Bir düğmeyi ve kaydırıcıyı içeren WPF'ye bir uygulama yazdım. Düğme için bir tetikleyici oluşturmak istiyorum, bu düğme 'IsEnable' özelliğinin kaydırıcı değeri daha büyük diğer bir değere göre yanlış olarak ayarlanır.WPF Değer eşit veya daha büyükse işe yarar olan tetikleyici

<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> 

Ama CurrentAltitude değeri 24000 eşit değilken isEnable ayarlamak istiyorum ama ne zaman eşit veya daha büyük 24000. Herhangi bir fikir olduğunu: Şu anda var?

+0

olası yinelenen özellik değeri büyüktür belirli bir miktar] (http://stackoverflow.com/questions/1094401/wpf-trigger-when-property-value-is-greater-than-a-certain-amount) – pogosama

cevap

13

Bunu kullanarak bir dönüştürücü elde edebilirsiniz:

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

Sonra tetikleyici aşağıdaki gibi görünecektir:

<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> 
+0

Dönüştürücü'den dönen Boolean ve kontrol edin, kahretsin :) – mkb

1

Bir daha genel dönüştürücü, herhangi benzer bir türü ile kullanılabilen, olabilir:

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

Ancak bu durumda, ConverterParameter değeri tr ile aynı türde yorumlanmalıdır. senin çevirmene adanmış. Örneğin, XAML, contant int değeri 1 int özelliği 'MyIntProperty' karşılaştırmak, bu sözdizimini kullanabilirsiniz:

<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> 

[WPF Tetik