0

我想创建可调整大小的窗口,它最初会自动调整为其内容。如果窗口的大小达到某些限制,自动调整大小将被禁用,并且不断增长的控件将被剪切或显示为滚动条。当用户调整窗口大小时,自动调整大小也必须关闭。

真正的任务是使用文本控件创建方便的可调整大小的对话框窗口。当它包含的文本行不多且不少时,最初自动调整对话框大小是合理的。文本量增加,对话框变大。当然它必须有一些尺寸限制。

PS我认为定义布局是一项非常频繁的任务,其中在布局的测量传递期间大小调整的指导作用有条件地从子级切换到父级并返回。

分享您的想法或现有的解决方案。可能是我错过了一些东西。谢谢你。

更新 1

让我解释一下算法:

1)显示窗口(假设所有数据/内容都已设置)。

2) 它的大小被调整,就好像窗口的属性是:

最大高度 = ...

最大宽度 = ...

SizeToContent = "宽度和高度"

3) 用户尝试调整窗口大小。他可以做到。内部控件会相应地改变它们的大小。

此行为等效于属性集:

MaxWidth = "{x:Ststic Double.PositiveInfinity}"

MaxHeight = "{x:Ststic Double.PositiveInfinity}"

SizeToContent = "手动"

ResizeMode = "CanResizeWithGrip"

4

2 回答 2

1

是的,您可以使用 XAML 仅使用动画/触发器来完成此操作,但这有点棘手。只需挂钩 TextBlock Loaded 事件(仅限 xaml)并使用动画更改 EventTrigger 内的 SizeToContent=manual && MaxWidth&MaxHeight=PosInfinity。

于 2012-09-06T14:22:18.687 回答
0

许多 WPF 面板会根据其子级自动调整大小。我建议阅读这篇文章以了解 WPF 中可用的布局面板类型:WPF 布局:可视化快速入门

但是要回答您的问题,请将您想要自动调整大小的所有控件放置在自动拉伸其子项的面板中,例如 aGrid或 a DockPanel,并设置面板的MaxHeightandMaxWidth属性以防止其增长超过某个高度/宽度。

<Grid MaxHeight="100" MaxWidth="200">
    <!-- Place your content here -->
</Grid>

根据包含面板的父控件的默认行为,您可能需要将HorizontalAlignmentand设置VerticalAlignment为其他内容Stretch

<Grid>
    <Grid MaxHeight="100" MaxWidth="200" HorizontalAlignment="Left" VerticalAlignment="Top">
        <!-- Place your content here -->
    </Grid>
</Grid>

如果您想要 aScrollBar而不是剪切内容,ScrollViewer请在Grid

于 2012-09-06T12:46:30.773 回答