2017-07-20 11 views
-1

トリガを使用してテキスト "0"を置き換えたいと思っています。プロパティのトリガから 'Text'プロパティを設定することはできません。同時にトリガの条件にも表示されます

プロパティのトリガから「テキスト」プロパティを設定することはできず、トリガの条件に同時に表示されます。

<TextBox MaxLength="10"> 
    <TextBox.Style TargetType="{x:Type TextBox}" x:Key="d1"> 
     <Style.Triggers> 
      <Trigger Property="Text" Value="0"> 
       <Setter Property="Text" Value="" /> 
      </Trigger> 
     </Style.Triggers> 
    </TextBox.Style> 
</TextBox> 
+0

エラーメッセージは私にとって非常にはっきりしているようで、合理的です。 WPFでは、無限ループを設定する必要はありません。これは、この状況で起こりうることです。設定者が値を変更したためにトリガが適用されなくなった場合、WPFはバインドされた値に戻ります(トリガが再び設定され、トリガがもう適用されなくなるなど)。あなたの質問には、広い目標が何であるかを知るには十分な文脈はありませんが、間違った問題を単に考えていることは明らかです。問題を解決し、良い[mcve]を含めて、よりよく説明してください。 –

答えて

2

エラーメッセージにはっきりとわかるように、これはできません。これはあなたがトリガーするのと同じプロパティに設定されます。

いくつかのオプションが含まれます:TextBoxはソースプロパティにバインドされている場合

  • は、あなたが文字列を変換するコンバータを使用することができ、「0」string.Emptyへ:https://www.codeproject.com/Tips/868163/IValueConverter-Example-and-Usage-in-WPF

  • もしTextプロパティstringプロパティにバインドされている場合は、このオブジェクトから「0」ではなくstring.Emptyを単に返すことができます。それはintプロパティがある場合

  • は、あなたがint?にそのタイプを変更し、nullの代わり0を返すことができます。 Textプロパティはデータバインドされていない場合、あなたはこのようなTextChangedイベント何か扱うことができる

  • private bool _handle = true; 
    private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 
        if (_handle) 
        { 
         _handle = false; 
         TextBox textBox = sender as TextBox; 
         if (textBox.Text == "0") 
          textBox.Text = string.Empty; 
         _handle = true; 
        } 
    } 
    

をだからあなたは多くのオプションを持っていますが、トリガーを使用すると、それらの一つではありません。

関連する問題