我希望能够动态调整内容控件的大小。
这是一个简单的例子:
...
<Slider x:Name="width" Minimum="40" Value="100" Maximum="300"/>
...
<ContentPresenter Width="{Binding Value, ElementName=width}" Content="Some value">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Grid MaxWidth="200" MinWidth="80">
<Rectangle Fill="Wheat" />
<TextBlock Text="{Binding}"/>
</Grid>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
在这个例子中,我想强制内容ContentPresenter的宽度保持在其生成的子节点的最小和最大宽度内(在这种情况下为80 - 200)。
显然,通过这样一个简单的例子我可以改变滑块的范围,但我的真实场景更复杂。我正在尝试将弹出屏幕的大小限制为其生成的内容。我无法在弹出窗口中设置明确的范围,因为我不知道内容将会是什么样的。内容必须能够限制自己。
不幸的是,孩子们的MaxWidth和MinWidth几乎被忽略了。当父级设置得较小时,MinWidth会导致裁剪。 MaxWidth会产生大量空白空间。看起来我必须在动态更新宽度值的相同位置设置MaxWidth和MinWidth。
答案 0 :(得分:0)
我的建议是将ContentPresenter替换为自定义面板(如果无法替换,请将ContentPresenter中的自定义面板包含在内),以您想要的方式实现所需的确切尺寸。声明一个派生自Panel的类然后覆盖MeasureOverride和ArrangeOverride是相当容易和简单的。在这种情况下,您可以使用基础MeasureOverride测量所有内容,然后只需将您想要的大小指定为可用空间。在ArrangeOverride中,只需将面板的直接子项指定为面板的最终大小(rect = 0,0,width,height)。