gpt4 book ai didi

c# - 视口(viewport)原点动画

转载 作者:行者123 更新时间:2023-11-30 15:30:19 25 4
gpt4 key购买 nike

我正在开发一个 Windows 手机应用程序,其中有一个视口(viewport) Controller ,它使我能够放大和缩小内容。我想将缩放集中在缩放的位置。我可以用它来做

Viewportcontroller.SetViewportOrigin()

但这会使视口(viewport) Controller 跳转到我设置的原点。这看起来不太好。因此,我想创建一个 Storyboard,随着缩放的发生逐渐改变原点。

因此我想问一下我应该如何使用 ViewportControl 的属性来做到这一点。我尝试了一些不同的动画类型、翻译和 xy。但是要么我选择了错误的属性,要么选择了错误的动画类型。因为什么都不起作用:(

因此,我的问题是双重的。我选择什么类型的动画。我该如何改变它?它应该是我设置的 DoubleAnimation 吗?但我似乎无法在这里设定一个点?非常感谢任何帮助!

最佳答案

我没有使用 ViewportControl 的经验,我假设 ViewportControl.SetViewportOrigin() 是设置原点的唯一方法(即:没有属性可以这样做)。

如果是这种情况,您可以将 ViewportControl 包装在自定义控件中。

添加两个控制的依赖属性(ViewportX 和 ViewportY,或一个点类型的依赖属性),并在 Storyboard中为这两个属性设置动画(使用简单的 DoubleAnimation)。

在这些属性的值更改回调中,您可以使用更改后的值调用 SetViewportOrigin()。

所以像这样:

public class WrappedViewport : Control
{
private ViewportControl _viewportControl;
protected override OnApplyTemplate()
{
// make sure there is an appropriate default style in generic.xaml
_viewportControl = (ViewportControl)GetTemplateChild("Viewport");
}

#region ViewportX
private static void ViewportXChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
WrappedViewport owner = (WrappedViewport)d;
owner._viewportControl.SetViewportOrigin(ViewportX, ViewportY);
}

private static readonly DependencyProperty ViewportXProperty = DependencyProperty.Register("ViewportX",
typeof(double),
typeof(WrappedViewport),
new PropertyMetadata(0d, ViewportXChangedCallback));

public double ViewportX
{
get { return (double)GetValue(ViewportXProperty ); }
set { SetValue(ViewportXProperty , value); }
}
#endregion

#region ViewportY
private static void ViewportYChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
WrappedViewport owner = (WrappedViewport)d;
owner._viewportControl.SetViewportOrigin(ViewportX, ViewportY);
}

private static readonly DependencyProperty ViewportYProperty = DependencyProperty.Register("ViewportY",
typeof(double),
typeof(WrappedViewport),
new PropertyMetadata(0d, ViewportYChangedCallback));

public double ViewportY
{
get { return (double)GetValue(ViewportYProperty ); }
set { SetValue(ViewportYProperty , value); }
}
#endregion
}

另见 http://msdn.microsoft.com/en-us/library/ms752914(v=vs.110).aspx

关于c# - 视口(viewport)原点动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com