none
怎么在一个窗体调用另一个窗体的一个带visual类型参数的方法? RRS feed

全部回复

  • 将A窗体的实例想办法给B B直接调用

    2020年1月2日 8:10
  • 不行,获取不到Grid
    2020年1月2日 8:19
  • 代码发出来看看呢 你直说了截图 那么你是怎么截图的 保存在哪?是否是在bitmap中
    2020年1月2日 8:35
  • private BitmapSource CreateElementScreenshot(Visual visual)
            {
    
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)printArea1.ActualWidth, (int)printArea1.ActualHeight, 0, 0, PixelFormats.Default);
                bmp.Render(visual);
    
                return bmp;
            }
    就是bitmap
    2020年1月2日 8:38
  • private BitmapSource CreateElementScreenshot(Visual visual)
            {
    
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)printArea1.ActualWidth, (int)printArea1.ActualHeight, 0, 0, PixelFormats.Default);
                bmp.Render(visual);
    
                return bmp;
            }
    就是bitmap
    明明是我回复的,怎么网站显示是这个id回复的
    2020年1月2日 9:01
  • 那这段代码跟grid有什么关系呢?bitmap只是一个在内存中的位图 就当它是位图吧 你所说的获取不到grid  是截不到grid中的内容吗? 截图的时候grid是否显示
    2020年1月2日 9:04
  • 调用是

    CreateElementScreenshot(grid)

    grid属于窗体A,这句可以在窗体A的后台使用,但我在另一个窗体调用,运行后会显示grid为空,最后保存一张黑图

    var dia = new DialogWindow();
     dia.CreateElementScreenshot(dia.grid);

    2020年1月2日 9:10
  • 这个时候就要看看 B窗口中的grid是否初始化了 在调用该函数之前设置断点进行查看,也许并不是这个函数的问题
    2020年1月2日 9:27
  • 这是进断点后

    2020年1月2日 9:28
  • 函数是没问题的,问题是怎么在另一个窗体初始化这个grid呢
    2020年1月2日 9:31
  • Hi,

    应该可以直接调用啊,比如Window1里有个ToImage的方法

     public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
                
            }
    
            public void ToImage(Visual vs)
            {
                RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)Width, (int)Height, 96d, 96d, PixelFormats.Default);
                targetBitmap.Render(vs);
                PngBitmapEncoder saveEncoder = new PngBitmapEncoder();
                saveEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));
                System.IO.FileStream fs = System.IO.File.Open("test.png", System.IO.FileMode.OpenOrCreate);
                saveEncoder.Save(fs);
                fs.Close();
            }
    
    
       
        }

    MainWindow里面直接调用截当前窗体的图像

        private void Button_Click(object sender, RoutedEventArgs e)
            {
                Window1 w1 = new Window1();
                w1.ToImage(this);
            }

    我测试过了,可以成功截图。

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2020年1月2日 9:33
  • 你好,我的意思是另一个窗体调用window1的方法截window1的图
    2020年1月2日 9:38
  • 看一下window1是否show  如果没有show是截取不到的 WPF跟Winform不一样  如果不进行呈现是不会进行渲染的 不渲染就得不到截图
    2020年1月3日 0:45
  • 你好,我的意思是另一个窗体调用window1的方法截window1的图

    Hi,

    你必须先打开window1,你可以使用下面方法:

      private void Button_Click(object sender, RoutedEventArgs e)
            {
                Window1 w1 = new Window1();
                w1.Show();
                w1.ToImage(w1);
                w1.Close();
            }

    Best Regards,

    Alex


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。




    2020年1月3日 1:41
  • 如果window1是page,就不能用Show()了,要怎么解决?
    2020年1月3日 2:33
  • 将page放在window里面再show
    2020年1月3日 2:46
  • 将page放在window里是可以show的,但如果用frame导航
    NavigationService.Navigate(new Uri("Window1.xaml", UriKind.Relative));
    岂不是会报错
    2020年1月3日 3:32