我是一名有用的助手,可以为您进行文本翻译。
我有一个遵循MVVM架构的WPF应用程序。
在其中一个屏幕上有一个图表,需要在单击保存按钮时将其保存为图像文件。
我可以使用下面的代码后台来保存图表:
Rectangle rect = new Rectangle(0, 0, 100, 100);
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
bmp.Save(fileName, ImageFormat.Jpeg);
但我需要能够在我的ViewModel中完成这个操作。
为此,我将ActualHeight和ActualWidth作为按钮的Click命令的参数传递,方式如下:
<Button Content="Save" Command="{Binding MyViewModel.SaveCommand">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource DimensionConverter}">
<Binding Path="ActualWidth" ElementName="MyChart"/>
<Binding Path="ActualHeight" ElementName="MyChart"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
在我的转换器中:
public class DimensionConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
return values.Clone();
}
...
}
然后,在命令执行逻辑中:
public void OnExecute(object parameter)
{
var values = (object[])parameter;
var width = (double)values[0];
var height = (double)values[1];
...
}
但是,我也需要能够相对于原点传递图表控件的坐标。这可以使用PointToScreen方法来完成。PointToScreen。但是,在考虑MVVM模式时,如何将它们传递给视图模型呢?
或者,在MVVM体系结构中,有没有其他捕获屏幕区域并保存为图像的方法?