2012-03-01 47 views
1

我正在使用wpf中的mediaelement,但問題是我無法將媒體放在medaiaelement上。 誰能告訴我解決方案。下面的代碼是.cs文件代碼。我設定allow drop property = true如何在wpf中的mediaelement上放置媒體?

private void mediaElement1_Drop(object sender, System.Windows.DragEventArgs e) 
    { 

     String[] FileName = (String[])e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop, true); 
     if (FileName.Length > 0) 
     { 
      String VideoPath = FileName[0].ToString(); 
      mediaElement1.Source = new Uri(VideoPath); 
      mediaElement1.Play(); 
     } 
     e.Handled = true; 
    } 

回答

3

自己試了一下。事實上,它會在你玩那裏之後起作用。 這裏的一點:假設我們有一個網格:

<Grid AllowDrop="True"></Grid> 

它不會允許下降。 現在以下

<Grid Background="Transparent" AllowDrop="True"></Grid> 

將允許下降。

第一個Grid根本沒有背景,所以實際上沒有辦法在它上面放置任何東西 - 沒有網格。在第二種情況下,即使我們看不到它,網格的背景也是如此。

同樣的事情適用於MediaElement。不幸的是,它沒有任何背景或內容屬性,因此在您開始播放某些內容之前,它不會放棄。

解決方案是處理MediaElement父容器上的放置。

順便說一句,不要忘記爲MediaElement設置LoadedBehavior =「Manual」,以便它播放掉落的文件。

編輯。

這是解釋爲什麼MediaElement不允許刪除,直到其中加載任何內容。

每個WPF組件實際上都由一些其他基本元素組成:邊框,網格,ContentPresenters等。因此,MediaElement中的某些內容處理丟棄。我無法告訴你它是什麼元素,因爲MediaElement的模板無法訪問。但是,處理拖放操作的元素的確切位置並不重要。重要的是,MediaElement的區域中沒有任何材料,直到您加載它的內容 - 就像本文開頭的我的示例與Grid一樣。我的意思是,當你將鼠標光標移到它的區域上時,遊標和MediaElement的容器之間沒有任何關係。嘗試處理MouseDown事件:結果將相同 - 直到您加載任何視頻纔會觸發。爲什麼?因爲沒有什麼可以提高的事件。沒有什麼不能提出任何事 正如我前面提到的,Background =「{x:Null}」和Background =「Transparent」之間存在很大差異:第一種情況下沒有背景刷,沒有背景,但是第二種情況下有一個。感到不同。

+0

感謝您的回覆,仍然無法正常工作,正在載入但未播放 – havan 2012-03-01 11:09:17

+1

適合我。將String處理器的第一行替換爲String [] FileName =(String [])e.Data.GetData(DataFormats.FileDrop); – EvAlex 2012-03-02 06:36:52

+0

k其working.but它是如何工作的第一次。你告訴我的過程 – havan 2012-03-02 08:49:40

相關問題