灵活的仅XAML布局。可能吗?

时间:2012-09-06 11:39:51

标签: wpf layout

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

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

P.S。我认为定义布局是一项非常频繁的任务,在布局条件下尺寸调整的指导作用从布局条件开始,从儿童转向父母和背部。

分享您的想法或现有解决方案。可能是我错过了什么。 谢谢。

更新1

让我解释一下算法:

1)显示窗口(让我们假设已经设置了所有数据/内容)。

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

MaxHeight = ...

MaxWidth = ...

SizeToContent =“WidthAndHeight”

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

此行为等同于设置的属性:

MaxWidth =“{x:Ststic Double.PositiveInfinity}”

MaxHeight =“{x:Ststic Double.PositiveInfinity}”

SizeToContent =“手动”

ResizeMode =“CanResizeWithGrip”

2 个答案:

答案 0 :(得分:1)

是的,你只能使用动画/触发器来使用XAML,但这有点棘手。 只需挂钩TextBlock Loaded事件(仅限xaml)并更改SizeToContent = manual&& MaxWidth& MaxHeight =使用动画在EventTrigger中的PosInfinity。

答案 1 :(得分:0)

WPF的许多面板会根据孩子的情况自动调整大小。我建议您仔细阅读本文,了解WPF中可用的布局面板类型:WPF Layouts: A Visual Quick Start

但要回答您的问题,请将您想要自动调整大小的所有控件放在一个自动拉伸其子项的面板中,例如GridDockPanel,然后设置MaxHeight和面板的MaxWidth属性,以防止它超过一定的高度/宽度。

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

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

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

如果您想要ScrollBar而非裁剪内容,请在ScrollViewer

内添加Grid