1

例如,我的 MainWindow.xaml 中有这个简单的标记:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Button Grid.Column="0" Margin="10" Width="300" />
    <Button Grid.Column="1" Margin="10" Width="300" />
</Grid>

当我启动应用程序并调整主窗口的大小时,我可以在裁剪按钮时使其小于按钮的大小。

我尝试设置 MinWidth 属性 - 没有用。唯一的方法是设置整个窗口的 MinWidth ,但这不是非常可维护的解决方案。

更新
Evetually 我找到了解决方案。
我为 MainWindow SizeChanged 添加了事件处理程序。使用以下代码:

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    FrameworkElement topmost = (Content as FrameworkElement);
    topmost.Measure(new Size(ActualWidth, ActualHeight));
    MinHeight = topmost.DesiredSize.Height + 40;
    MinWidth = topmost.DesiredSize.Width;
}

我发现任何 FrameWorkelement 的 Measure 方法都会强制它使用它可以占用的给定空间量来计算它想要占用的空间,并考虑它的所有子元素并将其存储到 DesiredSize 属性中。因此,我使用窗口的当前大小调用窗口最顶部元素的 Measure 方法,并在 DesiredSize 中获得窗口中所有内容的最小大小。然后我将窗口的 MinHeight 和 MinWidth 设置为这个最小尺寸值。它成功了!

4

2 回答 2

1

虽然@Dimitry M 的解决方案有效,但有一个更简单的解决方案,没有魔法值。设置SizeToContent="WidthAndHeight"事件监听器并将其绑定到 Window 的ContentRendered事件:

<Window ...
        SizeToContent="WidthAndHeight"
        ContentRendered="MainWindow_OnContentRendered">

这将强制窗口适应其内容,然后一旦它被渲染,我们通过将其最小尺寸设置为实际尺寸来防止调整尺寸。

private void MainWindow_OnContentRendered(object sender, EventArgs e)
{
    MinWidth = ActualWidth;
    MinHeight = ActualHeight;
}
于 2020-11-29T10:03:59.517 回答
0

删除按钮' Height

<Button Grid.Column="0" Margin="10" />
<Button Grid.Column="1" Margin="10" />

这将导致按钮根据窗口大小调整大小。

于 2013-06-15T15:42:57.333 回答