0

我希望能够动态调整内容控件的大小。

这是一个简单的例子:

...
<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 会导致大量空白空间。看起来我必须在动态更新 Width 值的同一位置设置 MaxWidth 和 MinWidth。

4

1 回答 1

0

我的建议是用自定义面板替换 ContentPresenter(或者,如果您无法替换它,则在 ContentPresenter 中附上一个自定义面板),以您想要的方式分配您想要的确切尺寸。声明一个派生自 Panel 的类然后重写 MeasureOverride 和 ArrangeOverride 是相当容易和简单的。在这种情况下,您可以使用基本的 MeasureOverride 测量所有内容,然后将所需的大小指定为可用空间。在 ArrangeOverride 中,只需将面板的直接子项指定为面板的最终大小(rect = 0,0,width,height)。

于 2011-05-13T18:42:15.470 回答