2011-06-09 33 views
3

使用VisualBrush,我拍攝了包含TabControl的Window的快照。來自Window的VisualBrush保留了以前的VisualBrush的圖像

快照#1:

enter image description here

切換到 「DOS」(不是微軟),快照#2:

enter image description here

如果我只是拍照的TabControl或DockPanel,一切工作正常,這個問題是特別拍攝的窗口的圖片。幫幫我!!背後

代碼:

using System; 
using System.Windows; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 

namespace WpfVisual 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      var bitmapSource = this.TakeSnapshot(this); 
      Snapshot.Source = bitmapSource; 
     } 

     public BitmapSource TakeSnapshot(FrameworkElement element) 
     { 
      if (element == null) 
      { 
       return null; 
      } 

      var width = Math.Ceiling(element.ActualWidth); 
      var height = Math.Ceiling(element.ActualHeight); 

      element.Measure(new Size(width, height)); 
      element.Arrange(new Rect(new Size(width, height))); 

      var visual = new DrawingVisual(); 
      using (var dc = visual.RenderOpen()) 
      { 
       var target = new VisualBrush(element); 
       dc.DrawRectangle(target, null, new Rect(0, 0, width, height)); 
       dc.Close(); 
      } 

      var renderTargetBitmap = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32); 
      renderTargetBitmap.Render(visual); // maybe here? 

      return renderTargetBitmap; 
     } 

    } 
} 

的XAML:

<Window x:Class="WpfVisual.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel> 
     <TabControl x:Name="Tabs" DockPanel.Dock="Left" Width="200"> 
      <TabItem Header="Uno"> 
       <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
          FontSize="50" Foreground="Red">#1</TextBlock> 
      </TabItem> 
      <TabItem Header="Dos"> 
       <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
          FontSize="50" Foreground="Green">#2</TextBlock> 
      </TabItem> 
     </TabControl> 
     <Button DockPanel.Dock="Top" Margin="10" FontSize="14" Click="Button_Click">Take a snapshot</Button>   
     <Image x:Name="Snapshot" Margin="10,0,10,10"></Image> 
    </DockPanel> 
</Window> 
+0

有一個很好的理由,我需要拍攝「窗口」的照片。這是因爲我們正在使用自定義窗口,並且還應該捕獲一個框架。 – tofutim 2011-06-09 18:20:55

回答

0

我發現,我能得到它的註釋掉的部分工作,我從做一個VisualBrush窗口。

//var visual = new DrawingVisual(); 
//using (var dc = visual.RenderOpen()) 
//{ 
// var target = new VisualBrush(element); 
// dc.DrawRectangle(target, null, new Rect(0, 0, width, height)); 
// dc.Close(); 
//} 

,並直接調用元素renderTargetBitmap.Redner

renderTargetBitmap.Render(element); 

雖然現在我不知道爲什麼我最後使用的DrawRectangle和VisualBrush的時候我可能只是直接呈現的元素。

相關問題