1

ユーザーにメッセージを表示するために使用していますが、表示した後System.Windows.MessageBox、そのテキストを更新したいと思いますMessagebox

私の場合の例では、MessageBox以下のように実行時に変更できるコンテンツを表示したいと思います。

"The system will be restarted in 5 seconds"
"The system will be restarted in 4 seconds"
"The system will be restarted in 3 seconds"
"The system will be restarted in 2 seconds"
"The system will be restarted in 1 second"
"The system will be restarted in 0 second"

誰かが私にそれを行う方法を教えてもらえますか?

どうもありがとう、

T&T

4

3 に答える 3

4

の代わりに別のウィンドウを使用する方が簡単だと思いますMessageBox。次に、不要な機能 (サイズ変更、閉じるボタン) をオフにし、モーダルにし、タイマー イベント処理をセットアップします。

于 2013-08-04T12:04:05.980 に答える
2

誰かが私にそれを行う方法を示すことができます

標準のメッセージボックス、つまりではできませんSystem.Windows.MessageBox

代替:

あなたができることは、イベントを介して更新するcustom message box(Windowsフォーム)を定義することです。そして、それを使用してユーザーにカウントダウンを表示します。labelasynchronously

于 2013-08-04T12:09:32.173 に答える
1

MessageBoxこれは、Extended WPF Toolkit から可能になります。データにTextバインドできる依存関係プロパティがありますが、残念ながら、MessageBox初期化は隠され、ソリューションには複数の行が含まれています。

最初に、(標準のメッセージ ボックス設定を適用するために) MessageBoxprotected メソッドを呼び出すため、祖先が必要です。次に、バインディングを に適用するオーバーロードInitializeMessageBoxを作成する必要があります。ShowText

class MyMessageBox : Xceed.Wpf.Toolkit.MessageBox
{
    public static MessageBoxResult Show(object dataContext)
    {
        var messageBox = new MyMessageBox();

        messageBox.InitializeMessageBox(null, null, "Hello", MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel);
        messageBox.SetBinding(MyMessageBox.TextProperty, new Binding
        {
            Path = new PropertyPath("Text"),
            Source = dataContext
        });
        messageBox.ShowDialog();
        return messageBox.MessageBoxResult;
    }
}

次に、データ コンテキストが必要です。

sealed class MyDataContext : INotifyPropertyChanged
{
    public string Text
    {
        get { return text; }
        set
        {
            if (text != value)
            {
                text = value;
                OnPropertyChanged("Text");
            }
        }
    }
    private string text;

    private void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

メッセージボックスのテキストを変更するコード:

public partial class MainWindow : Window
{
    private readonly MyDataContext dataContext;
    private readonly DispatcherTimer timer;
    private int secondsElapsed;

    public MainWindow()
    {
        InitializeComponent();

        dataContext = new MyDataContext();
        timer = new DispatcherTimer(TimeSpan.FromSeconds(1), DispatcherPriority.ApplicationIdle, 
            TimerElapsed, Dispatcher.CurrentDispatcher);
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        secondsElapsed = 0;
        timer.Start();

        MyMessageBox.Show(dataContext);

        timer.Stop();
    }

    private void TimerElapsed(object sender, EventArgs e)
    {
        dataContext.Text = string.Format("Elapsed {0} seconds.", secondsElapsed++);
    }
}

このアプローチの利点は、さらに別のメッセージ ボックスを作成する必要がないことです。

于 2013-08-04T13:04:06.357 に答える