2011-01-28 6 views
1

フォームのフィールドの要件が変更されたときにスタイルをプログラムで設定するのではなく、Labelの最後の文字をチェックするトリガーを使用することが可能です.Contentsは '*'で、ラベルのプロパティを設定します?WPFラベルのスタイルラベルの内容の未知のインデックスのcharに基づくトリガは可能ですか?

このようなものですが、Contentプロパティの最後の文字をチェックする方法はありますか?

答えて

3

私はあなたがそのためにコンバータを使用する必要があると思います。この

<Style x:Key="LabelStandard" TargetType="Label"> 
    <Setter Property="HorizontalAlignment"  Value="Left"/> 
    <Setter Property="VerticalAlignment"  Value="Top"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource self}, 
             Path=Content, 
             Converter={StaticResource LastCharConverter}, 
             ConverterParameter=*}" 
        Value="True"> 
      <Setter Property="Foreground" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
public class LastCharConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return false; 
     } 
     string content = value.ToString(); 
     if (content.Length > 0 && 
      content[content.Length - 1] == (char)parameter) 
     { 
      return true; 
     } 
     return false; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

アップデートのようなものを試してみてください

あなたは限り、あなたはその位置を知っているようにContent文字列内の任意の文字と結合することができます。

<Style x:Key="LabelStandard" TargetType="Label"> 
    <Setter Property="HorizontalAlignment"  Value="Left"/> 
    <Setter Property="VerticalAlignment"  Value="Top"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource self}, 
             Path=(Content)[2]}" 
         Value="*"> 
      <Setter Property="Foreground" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

しかし、あなたの文字列の長さは、あなたが内部の [2]をバインドすることができませんので、あなたに多くの良いしないだろうという(私はケースがあると仮定している)によって異なります場合、私は承知している任意の方法で(結合の)。これ以外

が、私はあなた自身が

+0

うーん...そんなに仕事が..私はというよりもプログラム的にそれを行うだろう指摘したように、あなたが解決策の後ろにコードをしなければならないと思う:) lbl.Style = (スタイル)this.Resources ["LabelRequired"]; – markmnl

+0

これはうまくいくでしょう、ありがとう! – markmnl

+0

更新ありがとうございます - 近いので、それを動作させようとしています。しかし、方法はありません。 – markmnl

関連する問題