网格忽略 WPF 中的 ClipToBounds
Posted
技术标签:
【中文标题】网格忽略 WPF 中的 ClipToBounds【英文标题】:Grid ignores ClipToBounds in WPF 【发布时间】:2016-07-16 22:21:12 【问题描述】:给定一个非常基本的Grid
,将ColumnDefinition
的宽度设置为*
,其中包含的按钮的硬编码宽度属性将被忽略,并且这些子元素被剪裁。它们不会被设置为Auto
的宽度剪裁。
如果在每个ColumnDefinition
上设置了正确的MinWidth
s,则可以防止这种剪辑,但这不是完全动态的。
我做错了什么还是这是最好的 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 更新问题 【参考方案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 就是答案。以上是关于网格忽略 WPF 中的 ClipToBounds的主要内容,如果未能解决你的问题,请参考以下文章