首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF和Silverlight控件和布局平移和缩放功能

WPF和Silverlight控件和布局平移和缩放功能
EN

Stack Overflow用户
提问于 2010-01-14 04:47:45
回答 4查看 2.4K关注 0票数 6

我想了解WPF/Silverlight布局的一般要求,使其能够实现平移和缩放(拖动和缩放)功能。我不是指图像的平移和缩放,而是指带有一些控件的整个页面(窗口)布局(或部分布局)。

布局的哪些功能和使用的自定义控件的哪些功能使布局固定和平移和缩放变得不可能?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-22 16:00:21

常规规则

除了少数例外,WPF中的所有内容都可以平移、缩放、旋转、拉伸等,让您尽情享受。这包括像Button这样的单个控件,像ListBox这样的复合控件,以及像StackPanel这样的容器。

exceptions

以下是例外情况:

  1. 如果您使用的是装饰器,并且AdornerDecorator位于平移/缩放区域之外,则附加到平移/缩放区域的装饰器将平移,但不会缩放。解决方案是在平移/缩放区域内放置一个额外的AdornerDecorator。
  2. 如果您使用弹出窗口,它将显示在其PlacementTarget的平移/缩放位置,但它本身不会缩放。当您平移包含其PlacementTarget的区域时,它也不会移动(基本上它位于目标控件上方的自己的表面中)。为了解决这个问题,当你想要在缩放/平移区域中弹出一些东西时,可以使用高Z顺序的零尺寸画布。
  3. 你定义的任何ContextMenu都会显示在弹出窗口中,所以即使你点击的区域被放大或缩小,菜单项也会显示正常大小。由于上下文菜单的性质,这可能是理想的行为。如果没有,您可以将菜单项包装在ViewBox中,并将缩放与主区域的缩放绑定在一起。
  4. 您的ToolTips将显示正常大小,即使UI被平移或缩放。与ContextMenu.
  5. If相同的解决方案您使用WinForms集成来集成遗留的WinForms控件和UI,它们在某些情况下不能正确地平移、缩放和裁剪。有一种高级技术可以解决此问题,您可以在屏幕外实现WinForms控件,然后使用BitBlt或类似工具将图像复制到窗口中作为图像,并将鼠标单击和按键转发到屏幕外窗口。
  6. 如果您绕过WPF而直接使用GDI+或DirectX,或者使用Win32 hWnds显示内容或UI,则该内容或UI将无法正确平移、缩放或裁剪到窗口,除非您在界面代码中自己执行此操作。

最终备注

  • 一个好的WPF总是使用像网格、DockPanel等面板来灵活地布置控件,以便它们自动调整到容器大小,而不是使用固定的大小和位置。平移/缩放区域的内部内容也是如此,但此规则有一个例外:平移/缩放区域中最外层的元素必须具有指定的大小。否则,如何定义要平移/缩放的区域?
  • 实现平移/缩放功能的简单方法是调整平移/缩放区域中最外层控件的RenderTransform。有许多不同的方法来实现平移和缩放控件,例如,您可以使用工具栏按钮和滑块、滚动条、鼠标滚轮、用于平移的spacebar+drag、平移UI本身的可拖动区域或这些控件的任意组合。
  • 如果您选择的平移机制是滚动条,那么您可能希望使用ScrollViewer,并且只使用RenderTransform进行缩放。
  • 请确保您在平移/缩放区域上设置了裁剪。RenderTransform
  • 否则,如果放大或侧移项目,它们仍将在平移/缩放区域之外可见。
票数 9
EN

Stack Overflow用户

发布于 2010-01-17 15:59:52

使用MultiScaleImage或画布区域,并放置平移和缩放所需的所有内容

代码语言:javascript
复制
<Canvas x:Name="panZoomPanel" Background="Transparent">
</Canvas>

在代码中,使用在TransformGroup中创建TranslateTransform和ScaleTransform来平移和缩放

查看其他SO post或此examplethis one

票数 3
EN

Stack Overflow用户

发布于 2010-01-22 04:32:01

通常,您可以像处理单个UIElement一样处理任何组合的UI元素集,因此图像的情况与处理整个应用程序的情况没有什么不同。处理基于用户输入的缩放的最佳方法(与Viewbox所做的自动缩放相反)是应用ScaleTransform。这可以在较高级别的父元素上设置,比如窗口布局根部的Grid。对于平移,您可以在TranslateTransform中组合,或者在某些情况下使用ScrollViewer来处理内容视图的移动。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2060133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档