c#visual studio WPF应用程序从MainWindow文本框输出到辅助窗口

时间:2014-11-06 15:44:12

标签: visual-studio-2012

好的,我是个菜鸟,所以对我很轻松。 我使用c#在WPF中创建了一个应用程序。 在我所做的许多功能中,一个是一个文本框,显示从1:0:0到0的倒计时。 这有一个开始/重置,播放/暂停,+ 30秒,-30秒按钮连接。 它们都完美无缺。但是,我需要从该特定文本框显示的输出显示在我在另一个或重复文本框中创建的辅助窗口中。 这甚至可能吗?

由于

   public void CountDownTimer()
            {
        _timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate
        {
            // _time = TimeSpan.FromMinutes(60);
            ShowTimer.Text = _time.ToString("c");
            if (_time == TimeSpan.Zero) _timer.Stop();
            _time = _time.Add(TimeSpan.FromSeconds(-1));
        }, Application.Current.Dispatcher);
    }

    //STARTS TIMER FROM 1HOUR ALSO RESETS
    private void StartButton_Click(object sender, RoutedEventArgs e)
    {
       _time = TimeSpan.FromMinutes(60);
       _timer.Start();
     }
    //PAUSES AND COMMENCES TIMER NOTE: THIS DOES NOT RESET THE TIMER
    private void PauseButton_Click(object sender, RoutedEventArgs e)
    {
        if (_timer.IsEnabled)
        {
            _timer.Stop();
        }
        else _timer.Start();

    }

1 个答案:

答案 0 :(得分:0)

我知道你知道这里有不好的做法,所以我不会因此而嘲笑你。 :d

实现您想要的最简单方法是将辅助窗口作为第一个窗口的成员,然后将DispatchTimer的回调更改为

_timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate
    {
        // _time = TimeSpan.FromMinutes(60);
        ShowTimer.Text = _time.ToString("c");
        if (_time == TimeSpan.Zero) _timer.Stop();
        _time = _time.Add(TimeSpan.FromSeconds(-1));
        secondaryWindow.TextBoxTimer = _time;
    }, Application.Current.Dispatcher);

这取决于您实例化辅助窗口的位置和方式,以及第一个窗口是否引用它。您还可以考虑在计时器更改时引发事件,并使用更新文本框的处理程序将辅助窗口订阅到该事件。更好的是,不要将TextBox之类的控件用作变量,而是将它们绑定到另一个类中的属性。这是迈向MVVM的一步。