1

MVVMパターンに従ってWPFアプリケーションを作成しています。ボタンとテキストブロックが1つあります。TextBlockは、テキストが空でない場合にのみ表示されます。アプリケーションの開始時にテキストは空になり、テキストブロックは表示されません。ボタンをクリックすると、サンプルテキストが設定され、テキストブロックが表示されます。そして、もう一度クリックすると、ボタンのテキストが空に設定され、テキストブロックが非表示になります。

今私が欲しいのは、テキストが設定されると、アニメーション(フェード)の不透明度が5秒で0から1に変わることです。

これが私のXAMLです

<TextBlock Text="{Binding StatusMessage}" Visibility="{Binding IsStatusMessageVisible}" />
<Button Content="UpdateText" Command="{Binding UpdateTextCommand}" />

そして、これが私のViewModelです。

    private string _statusMessage;
    public string StatusMessage
    {
        get { return _statusMessage ?? (_statusMessage = string.Empty); }
        set
        {
            _statusMessage = value;
            NotifyOfPropertyChange(() => IsStatusMessageVisible);
            NotifyOfPropertyChange(() => StatusMessage);
        }
    }

    public System.Windows.Visibility IsStatusMessageVisible
    {
        get
        {
            return (string.IsNullOrEmpty(StatusMessage))
                ? System.Windows.Visibility.Collapsed
                : System.Windows.Visibility.Visible;
        }
    }

    public void UpdateText()
    {
        if (string.IsNullOrEmpty(StatusMessage))
            StatusMessage = Properties.Resources.WaitMessageStatus;
        else
            StatusMessage = string.empty;
    }

StatusMessageテキストが設定されているときにアニメーションが実行されるようにしたいだけです。

4

2 に答える 2

0

まず、ビューモデルの「可視性」プロパティを取り除きます。これはそこに属していません...ブール値である必要があります。次に、 のスタイルを作成しますTextBlock。そのスタイルではDataTrigger、ブール値の「IsVisible」プロパティにバインドするように追加します。の中でDataTrigger、ストーリーボードを作成します。

<DataTrigger.EnterActions>
    <BeginStoryboard>
        <Storyboard>
            <!--Animation code in here />
        </Storyboard>
    </BeginStoryboard>
</DataTrigger.EnterActions>

不透明アニメーションの方法の例については、Google で検索してください...しかし、ここに1 つの方法があります

于 2012-08-29T12:12:59.457 に答える
0

次の手順を実行します:

  1. ViewModel で TextChanged イベントを宣言します
  2. StatusMessage プロパティの set メソッドで、「_statusMessage = value;」行の前に TextChanged イベントを発生させます if (_statusMessage != value && !string.IsNulOrEmpty(value));
  3. XAML で、StoryBoard を作成して TextBlock の不透明度を変更します。
  4. XAML で、ControlStoryBoardBehavior を TextBlock に追加し、TextChanged イベントと StoryBoard を選択します。
于 2012-08-29T10:09:29.180 に答える