【问题标题】:Grid ignores ClipToBounds in WPF网格忽略 WPF 中的 ClipToBounds
【发布时间】:2016-07-16 22:21:12
【问题描述】:

给定一个非常基本的Grid,将ColumnDefinition 的宽度设置为*,其中包含的按钮的硬编码宽度属性将被忽略,并且这些子元素被剪裁。它们不会被设置为Auto 的宽度剪裁。

如果在每个ColumnDefinition 上设置了正确的MinWidths,则可以防止这种剪辑,但这不是完全动态的。

我做错了什么还是这是最好的 WPF?

变成

标记:

    <Grid ShowGridLines="True" ClipToBounds="False">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
            <Button Grid.Column="0" Width="120">AAAAA</Button>
            <Button Grid.Column="1" Width="120">BBBB</Button>
            <Button Grid.Column="2" Width="120">CCCCC</Button>
    </Grid>

我希望按钮在有空间时显示为第一张图片,在没有空间时显示为第三张图片(即在任何情况下都没有剪辑)。

【问题讨论】:

  • 您能否为窗口最小化时想要发生的事情添加图表?按钮总是 120 宽度还是您希望它们随着窗口大小的调整而缩小?谢谢
  • @SWilko 更新问题

标签: c# wpf clipping


【解决方案1】:

啊,我已经解决了如下:

关键是ColumnDefinition中的MinWidth属性。

 <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spLeft }"></ColumnDefinition>
            <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spMid }"></ColumnDefinition>
            <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spRight }"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <StackPanel Background="Red" Grid.Column="0" Name="spLeft" HorizontalAlignment="Center">
            <Button  Width="120">AAAAA</Button>
        </StackPanel>
        <StackPanel Background="Green" HorizontalAlignment="Center" Grid.Column="1" Name="spMid">
            <Button  Width="120">BBBB</Button>
        </StackPanel>
        <StackPanel Background="Blue" Name="spRight" Grid.Column="2" HorizontalAlignment="Center">
            <Button  Width="120">CCCCC</Button>
        </StackPanel>
    </Grid>

【讨论】:

    【解决方案2】:

    只需在 Grid 中添加一个 MinWidth:

    <Grid ShowGridLines="True" ClipToBounds="False" MinWidth="360">
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
            <Button Grid.Column="0" Width="120">AAAAA</Button>
            <Button Grid.Column="1" Width="120">BBBB</Button>
            <Button Grid.Column="2" Width="120">CCCCC</Button>
    </Grid>
    

    【讨论】:

    • 您好 Arnaud,感谢您的回答。我正在寻找一种不需要我硬编码文字minwidth 的动态方法。请参阅我对这个解决方案的回答。
    • 嗨 Maxp,从技术上讲,这是对您问题的正确答案,尽管我可以理解您想要一些您没有表达过的东西。无论如何,MinWidth 就是答案。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2011-06-18
    相关资源
    最近更新 更多