2012-02-03 179 views
-2

当数值超过24时,触发器无法工作。我有一个文本框来测试转换器,它的工作原理。但是这个标签的触发器不起作用。 转换器是XAML代码如下触发器无法正常工作

<Label x:Name="label" Content="{Binding Text, ElementName=textBox2}"HorizontalAlignment="Left" Margin="69,110,0,0" Width="122.63" VerticalAlignment="Top"Background="White"FontSize="26.667"> 

  <Style TargetType="Label"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Label.Content, Converter={StaticResource dc}}" Value="Above24"> 
         <Setter Property="Foreground"> 
          <Setter.Value> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
            <GradientStop Color="Black" Offset="1"/> 
            <GradientStop Color="#FFCE0A0A"/> 
            <GradientStop Color="#FF2A0202" Offset="0.75"/> 
            <GradientStop Color="#FF5B0404" Offset="0.5"/> 
            <GradientStop Color="#FF9C0707" Offset="0.25"/> 
           </LinearGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Label.Style> 
    </Label> 
class 
DataConverter 
: 
IValueConverter 
{ 
     object IValueConverter.Convert 
(object value, 
Type targetType, 
object parameter, 
System.Globalization.CultureInfo culture) 
{ 
      if (value == null) return false; 
      if (string.IsNullOrEmpty(value.ToString())) return false; 
      if (Convert.ToInt32(value) < 18) return "Below18"; 
      if (Convert.ToInt32(value) > 24) return "Above24"; 
      return Convert.ToInt32(value) < 100; 
     } 
    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 
+0

请出示转换器 – 2012-02-03 12:52:33

+0

的代码不会触发这个有效检查路径'对标签的DataContext的Label.Content'? – 2012-02-03 12:53:25

+1

你的代码格式是一个真正的混乱。您应该考虑使用其中一种可接受的方式来格式化源代码。 – 2012-02-03 12:59:26

回答

0

试试,注意使用的RelativeSource的。

<Style TargetType="Label"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self},Converter={StaticResource dc}}" Value="Above24"> 
        <Setter Property="Foreground"> 
         <Setter.Value> 
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
           <GradientStop Color="Black" Offset="1"/> 
           <GradientStop Color="#FFCE0A0A"/> 
           <GradientStop Color="#FF2A0202" Offset="0.75"/> 
           <GradientStop Color="#FF5B0404" Offset="0.5"/> 
           <GradientStop Color="#FF9C0707" Offset="0.25"/> 
          </LinearGradientBrush> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Label.Style> 
</Label> 
+0

它现在工作.thx。我看到你绑定了内容。我用来绑定Label.Content,但它不起作用。为什么? – Chaos 2012-02-03 13:03:37

+0

@Chaos在使用标准绑定绑定到对象属性,因此只需使用属性名称,在其他地方,您可能会使用绑定到依赖项属性的元素,在这种情况下,您可以表示对象限定符以指示定义了DP的位置。 – 2012-02-03 13:08:50