2011-07-06 50 views
1

在我的模型視圖中,我有一個ObservableCollection的BitmapImages,顯示在我的視圖的列表框中。我想旋轉ObservableCollection中的選定圖像。BitmapImage旋轉

+0

而你的問題是...... – anivas

回答

0

在您的DateTemplate中定義如何顯示圖像(如列表框項),您可以使用.RenderTransform屬性來轉換/旋轉控件。

示例按鈕:

<Button 
      <Button.RenderTransform> 
       <RotateTransform CenterX="0" CenterY="0" Angle="45"/> 
      </Button.RenderTransform> 
      Test</Button> 

Have a read more on How to Rotate an object? MSDN Article

+0

是有一種方法可以直接在modelView中的Observable Collection中執行此操作,因爲我不想旋轉所有圖像,只是選擇了一個圖像? –

+0

你不必旋轉所有圖像,使用DataTemplate和你的Listbox,它會爲你旋轉它們。否則你必須在WPF外部操縱你的圖像並將它添加到「旋轉狀態」的集合中 –

+0

這就是我想要的,因爲如果圖像旋轉了,我需要在XPS文件中以相同的方式將其保存。我也只有1個旋轉按鈕,我沒有把它放在列表框中。 –

1

好了,想通了,你可以讓我知道,如果事情看起來愚蠢

//Create a transform 
TransformedBitmap tBmp = new TransformedBitmap(); 
tBmp.BeginInit(); 

//Set the source = to the image currently selected 
tBmp.Source = _Scans[_selectedImage].MyImage; 
RotateTransform rt = new RotateTransform(180); 
tBmp.Transform = rt; 
tBmp.EndInit(); 

//Create a new source after the transform 
BitmapSource s1 = tBmp; 
BitmapImage bi = BitmapSourceToBitmapImage(s1); 

//Add create the item and replace the current item in the collection 
//edited according to comment 
//ScannedImages s = new ScannedImages(); 
//s.MyImage = bi; 
//_Scans[_selectedImage] = s; 
Scans[_selectedImage].MyImage = BitmapSourceToBitmapImage(s1); 
+0

好吧,從零開始創建一個新項目並將其添加到集合中。我對WPF和數據綁定相當陌生,並忘記將NotifyPropertyChanged放在集合中的項目上。所以最後4行代碼應該是這一行。掃描[_selectedImage] .MyImage = BitmapSourceToBitmapImage(s1); –