2010-04-02 100 views
4

我試圖刪除WPF中的圖像文件,但WPF鎖定了該文件。刪除XAML使用的圖像文件

<Image Source="C:\person.gif" x:Name="PersonImage"> 
     <Image.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Delete..." x:Name="DeletePersonImageMenuItem" Click="DeletePersonImageMenuItem_Click"/> 
      </ContextMenu> 
     </Image.ContextMenu> 
    </Image> 

而Click處理程序看起來就像這樣:

private void DeletePersonImageMenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     System.IO.File.Delete(@"C:\person.gif"); 
    } 

但是,當我嘗試刪除它已被鎖定的文件無法刪除。

有關如何刪除文件的任何提示?

回答

1

首先將其從PersonImage控件中刪除,然後刪除圖像。希望這會有所幫助。 正如您已分配給源中的控件一樣,並在不取消分配控制源的情況下將其刪除。

PersonImage.Source = null; 
System.IO.File.Delete(@"C:\person.gif"); 

希望能有所幫助。

+6

不幸的是,沒有幫助。 – 2010-04-02 14:43:57

+0

無法正常工作無法刪除文件... ERRRO =文件已被使用.. – 2017-06-29 06:20:31

8

我的應用Intuipic通過使用自定義轉換器來解決這個問題,該轉換器釋放圖像資源。請參閱代碼here

+0

這是迄今爲止最好的解決方案,恕我直言,並不難做。 – 2013-04-18 14:29:35

+0

有史以來最好的解決方案!謝謝@Kent。 – gmetax 2016-01-20 19:14:21

+0

MVVM場景的唯一實用解決方案。非常感謝! – 2016-11-16 15:49:51

0

這樣做將是最簡單的方法,創建鏡像文件的臨時副本,並用它作爲源..然後在你的應用程序的結束,刪除所有臨時文件..

static List<string> tmpFiles = new List<string>(); 

static string GetTempCopy(string src) 
{ 
    string copy = Path.GetTempFileName(); 
    File.Copy(src, copy); 
    tmpFiles.Add(copy); 
    return copy; 
} 

static void DeleteAllTempFiles() 
{ 
    foreach(string file in tmpFiles) 
    { 
     File.Delete(file); 
    } 
} 

WPF中的圖像緩存也可以配置爲執行此操作,但出於某種原因,我的各種嘗試都失敗了,並且出現意外行爲,例如無法刪除或刷新圖像等,因此我們這樣做了。

+0

謝謝,我用它從我創建的'listbox'中刪除圖像。您必須創建臨時表和實際文件的文件名的並行列表。實際文件和臨時文件必須位於相同的索引處,以便在刪除時可以使用它們的索引來執行此操作。 – Stylzs05 2012-05-23 15:14:12