0

インターフェイスに10進値を含むテキストボックスがあり、ユーザーが選択するたびにクリアしたいと考えています。

ただし、ユーザーが変更を加えずに別のインターフェイス要素を選択した場合は、クリア前のテキストに戻すためのテキストが必要です。

これまでのところ、私は次のスタイルを持っています:

<Style x:Key="CustomTextBoxStyle" TargetType="{x:Type TextBox}">
     <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Text" Value="{x:Null}" />
            </Trigger>
        </Style.Triggers>
    </Style>

次に、スタイルを使用するには次のようにします。

<TextBox Style="{DynamicResource CustomTextBoxStyle}" 
                     Tag="{Binding myDecimalValue, StringFormat=#.###}" 
                     TabIndex="1" />

ただし、このシナリオでは、ユーザーが新しい値を入力した場合でも、値は元の値に戻ります。

誰かがこれを達成するための最善の方法を教えてもらえますか?

ありがとう、

4

3 に答える 3

0

助けてくれてありがとう、しかし私は次のように説明されているAttachedPropertyを使用することで、私が探していたものを達成し、MVVMの原則を順守することができました。

https://stackoverflow.com/a/7972361/1466960

これにより、IsFocusedプロパティをビューモデルの値にバインドし、RyanAmiesによって説明されたものと同様の方法で続行することができました。

モデルの表示:

bool isFocused = false;
double original;

public bool IsFocused
{
    get
    {
        return isFocused;
    }
    set
    {
        isFocused = value;

        if (isFocused)
        {
            original = current;
            current = "";
        }
        else
        {
            if (HundredPercentLine == "")
                current = original;
        }

        OnPropertyChanged(new PropertyChangedEventArgs("IsFocused"));
    }
}
于 2012-07-04T08:20:04.763 に答える
0

ここでの解決策は、テキストを非表示にするのではなく、後で使用できるように変数に格納することです。C# では、コードは次のようになります。

string _originalValue;

public OnFocus(){
    _originalValue = TextBox.Text;
    TextBox.Text = "";
}
public LostFocus(){
    if(TextBox.Text == "")
        TextBox.Text = _originalValue;
}
于 2012-07-03T15:23:31.397 に答える
0

必要に応じて、前景色を透明に設定してテキストを非表示にすることができます。

実際にテキストを削除したい場合は、データコンテキストを介して取得できるビューモデルで Ryan Amies が提案していることを実行する必要があります。

于 2012-07-03T15:34:00.343 に答える