如何相对缩放用户控件的大小?

Posted

技术标签:

【中文标题】如何相对缩放用户控件的大小?【英文标题】:How to relative scale size of User Control? 【发布时间】:2010-11-27 20:52:08 【问题描述】:

如何像图像一样缩放用户控件的相对大小(在图像编辑器中)。

示例(100%):

(来源:stegnar.com)

缩小 UC (70%):

(来源:stegnar.com)

好吧,我在图片编辑器中实现了这一点,但我想在 WPF 中。 :) 我需要这个来将我的应用程序调整为不同的屏幕分辨率,而没有隐藏(没有滚动条)。

【问题讨论】:

【参考方案1】:

您可以尝试放大/缩小其内容以填充可用空间的 ViewBox 控件。

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1">
<Grid>
    <Viewbox StretchDirection="Both" Stretch="Uniform">
        <local:UserControl1 Height="600" Width="600"/>
    </Viewbox>
</Grid>

【讨论】:

太棒了!这正是我所需要的。【参考方案2】:

使用 Viewbox(正如 Milan Nankov 所说)是个好主意。我必须警告您的一件事是它还会放大或缩小其他视觉方面。

例如,尺寸为 200 X 1000 的文本框与放大 10 倍的尺寸为 20 X 100 的文本框非常不同。

WPF 提供了许多布局选项,可以根据容器的大小改变控件的尺寸。但它不会改变文本的大小。 Viewbox 克服了这个问题,但它引入了另一个问题。检查下图,它在缩放前后的视图框中显示了相同的文本框。

可以使用的一个技巧是将每个 文本块 放在一个视图框中。但我想这将是一个矫枉过正,我真的没有任何支持这个把戏。请自己检查并回复是否实用。

另一个技巧可能是将控件的高度绑定到字体大小。在这种情况下,我们将需要一个转换器。请参考这个回复。。Resize font in TextBox in Grid

【讨论】:

【参考方案3】:

您可以将整个容器放入 ViewBox

<Viewbox StretchDirection="Both" Stretch="Uniform">
  <Grid>...</Grid>
</Viewbox>

您不必将每个文本块都放入其中!

【讨论】:

以上是关于如何相对缩放用户控件的大小?的主要内容,如果未能解决你的问题,请参考以下文章

win10qt软件控件大小

自定义 Winforms 设计器控件同时缩放和平移控件

mfc dialog 尺寸无法固定控件位置如何确定?

VS控件大小随窗体大小等比例放大或缩小

Visual C++ 中的缩放/缩放 CWnd 控件

VB中如何设置窗体内控件大小随窗体大小改变而改变?