2014-07-26 53 views
0

據我所知,DispatcherTimer的Tick事件需要用EventArgs調用,而同一個事件調用一些按鈕的動作,需要用RoutedEventArgs調用。顯然,我無法直接調用按鈕的事件。我的問題是:有什麼辦法來實現這一點,無論如何?如何實現一個調用WPF C#中的按鈕事件的計時器?

private void song_timer_Tick(object sender, EventArgs e) 
    { 
     if (playing == true) 
     { 
      lbl_curent_time.Text = audio_device.audioFileReader.CurrentTime.ToString(); 

      if (music_state_progress.Value < music_state_progress.Maximum) 
      { 
       music_state_progress.Value = music_state_progress.Value + 1; 
       taskbar.SetProgressValue(Convert.ToInt32(music_state_progress.Value), Convert.ToInt32(music_state_progress.Maximum)); 
      } 

      if (lbl_curent_time.Text == audio_device.audioFileReader.TotalTime.ToString()) 
       if (music_list.SelectedIndex < music_list.Items.Count - 1) 
       { 
        btn_next_Click(sender, e); 
        music_list_DoubleClick(sender, e); 
       } 
       else if (repeat_checkbox.IsChecked == true) 
       { 
        music_list.SelectedIndex = 0; 
        music_list_DoubleClick(sender, e); 
       } 
       else 
       { 
        btn_stop_Click(sender, e); 
        lbl_curent_time.Text = "00:00:00.0000000"; 
        lbl_max_time.Text = "00:00:00.0000000"; 
       } 
     } 
    } 
+0

是否使用'EventArgs'按鈕單擊處理程序? –

+0

Nope,RoutedEventArgs,因爲它是WPF所必需的。 –

+0

然後,我會建議將代碼提取到一些常見的地方,並從按鈕點擊處理程序和您的滴答處理程序中調用該方法。那麼你不必擔心它。 –

回答

1

採取更換:

btn_stop_Click(sender, e); 

有:

btn_stop.RaiseEvent(new RoutedEventArgs(System.Windows.Controls.Primitives.ButtonBase.ClickEvent)); 
+0

謝謝,它像一個魅力工作! –

+0

沒問題,你能標記答案嗎?謝謝 –

1
ButtonAutomationPeer peer = 
    new ButtonAutomationPeer(someButton); 
IInvokeProvider invokeProv = 
    peer.GetPattern(PatternInterface.Invoke) 
    as IInvokeProvider; 
invokeProv.Invoke(); 

HERE

相關問題