2015-02-24 30 views
0

我不能爲我的生命得到了以下功能工作:在WinRT中暫停UI 8.1

  1. 用戶點擊項目
  2. 產品的圖像變成通過形象的改變visibility屬性
  3. 後可見時間圖像的短時間內通過改變 visibility屬性

或者,更簡單地再次變得不可見的(沒有用戶輸入):

  1. 使可見UI變化
  2. 暫停,以便用戶可以看到UI變化
  3. 反向步驟1的UI變化

步驟2步驟1和3之前發生不管在碼是因爲UI直到邏輯完成後纔會更新(我假設)。

我正在通過與INotifyPropertyChanged的數據綁定來設置圖像的可見性。除了當我試圖介紹暫停時,所有的工作都如預期。

我想用這個簡單的方法暫停:

private void Pause() 
    { 
     new System.Threading.ManualResetEvent(false).WaitOne(1000); 
    } 

它不會暫停,但用戶界面的變化等,即使更改了綁定的數據發生befores暫停該暫停調用,直到後,另一個變化後。

我已經使用調度試過,但它不會改變任何東西,我也沒有足夠的理解:

await dispatcher.RunAsync(CoreDispatcherPriority.High,() => 
      { 
       clickedCard.IsFaceDown = false; // makes the image visible via data binding 

      } 

      ); 
Pause(); 

我想我需要做什麼的線程,但我將在界。 任何想法?

回答

1

你不應該做這樣的事情你的應用程序的UI線程內:

new System.Threading.ManualResetEvent(false).WaitOne(1000); 

有沒有做這種種原因,但在您的特定情況下,問題是,XAML只能重新繪製一次你的事件處理程序完成。所以基本上發生這種情況:

  1. 的產品invisible
  2. 事件處理函數被調用
  3. 將其設置爲visible但用戶界面不會刷新尚未
  4. 凍結該線程一秒鐘
  5. 您再次將它設置爲invisible
  6. 事件處理程序完成
  7. 現在基於當前值的UI更新(這是invisible

我建議你看一下建立一個Storyboard做到這一點 - 混合可以提供幫助。 See here

+0

謝謝,我預料會發生什麼事情。我可以創建一個故事板以逐漸淡出圖像,但我不知道如何使它在GridView中的項目上工作。我如何獲得已被點擊的gridview的「單元格」(與e.ClickedItem中的綁定數據相反)? 對於如此簡單的(和推測是常見的/基本的)需求,故事板看起來很複雜,因爲「經過一段時間後才做x」。 – pumpkinszwan 2015-02-25 02:52:11

+0

另一種選擇是簡單地以非阻塞的方式延遲:使用'await Task.Delay(1000)'而不是睡眠。 – 2015-02-25 03:41:48

+0

謝謝,彼得,這工作。我最初嘗試過Task.Delay,但是我一定有什麼錯誤,這導致我在錯誤的地方尋找答案! 我只是做了一切異步並在切換圖像可見性之前添加了Task.Delay。 – pumpkinszwan 2015-02-25 04:32:57