我正在开发一个Windows应用商店应用程序。我有一个画布,我必须放大每当用户按下“+”键并缩小“ - ”键时。当画布处于原始状态时,缩小应该停止大小
似乎没有默认的方法。
我该怎么做?
我会非常感谢您的帮助。
答案 0 :(得分:0)
我在尝试这个之前遇到了同样的问题
用于放大或缩小
delta = 1; // 0 for zoom out
var transform = canvas.RenderTransform as MatrixTransform;
var matrix = transform.Matrix;
var scale = delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor
if (dt == null)
{
dt = new System.Data.DataTable();
dt.Columns.Add("Delta", typeof(double));
dt.Columns.Add("X", typeof(double));
dt.Columns.Add("Y", typeof(double));
}
dt.Rows.Add(scale, position.X, position.Y);
matrix.ScaleAtPrepend(scale, scale, position.X, position.Y);
transform.Matrix = matrix;
重置为原始
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
var element = MainCanvas;
var transform = element.RenderTransform as MatrixTransform;
var matrix = transform.Matrix;
var Delta = (double)dt.Rows[i]["Delta"] * -1;
var scale2 = Delta >= 0 ? 1.1 : (1.0 / 1.1); //scale_ * 1;//e.Delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor
var X = (double)dt.Rows[i]["X"];
var Y = (double)dt.Rows[i]["Y"];
//matrix = transform_.Matrix;
matrix.ScaleAtPrepend(scale2, scale2, X, Y);
transform.Matrix = matrix;
scale2 = 0;
}
dt = null;
in xaml
<Canvas.RenderTransform>
<MatrixTransform/>
</Canvas.RenderTransform>
答案 1 :(得分:0)
ScrollViewer
元素具有一组内置函数,可将缩放应用于其子元素。所以你可以将你的画布放在一个:
<ScrollViewer x:Name="scrollViewer"
MinZoomFactor="0.5" MaxZoomFactor="5"
VerticalScrollMode="Disabled" HorizontalScrollMode="Disabled">
<Canvas />
</ScrollViewer>
然后在你的cs:
public MainPage() {
this.InitializeComponent();
Window.Current.CoreWindow.KeyDown += Canvas_KeyDown;
}
private void Canvas_KeyDown(object sender, KeyEventArgs e) {
var actual = scrollViewer.ZoomFactor;
if (e.VirtualKey == Windows.System.VirtualKey.Add)
scrollViewer.ChangeView(null, null, actual + 0.2f);
else if (e.VirtualKey == Windows.System.VirtualKey.Subtract)
scrollViewer.ChangeView(null, null, actual - 0.2f);
}
您可能需要知道,如果用户使用滚轮滚动,它将自动更改缩放系数,以及移动设备/平板电脑用户“捏”画布。