网格忽略WPF中的ClipToBounds

问题描述:

给定一个非常基本的Grid,其中ColumnDefinition的宽度设置为*,忽略该按钮所包含的硬编码宽度属性并剪裁这些子元素。它们没有被裁剪的宽度设置为Auto网格忽略WPF中的ClipToBounds

如果在每个ColumnDefinition上设置了正确的MinWidth,但是这不完全是动态的,则会阻止此剪辑。

我做错了什么,或者这是最好的WPF提供?

enter image description here

变得

enter image description here

标记:

<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> 

我想的按钮显示为每所述第一图像时有空间,并作为图像3时没有(即在任何情况下都没有限幅)。

enter image description here

+0

当窗口最小化时,您是否可以添加图表以获得想要发生的情况?总是120宽度的按钮,或者你希望它们缩小窗口大小? thx – SWilko

+0

@SWilko更新了问题 – maxp

啊,我如下解决它:

的关键是在ColumnDefinitionMinWidth属性。

<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> 

只需添加一个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> 
+0

嗨Arnaud,谢谢你的回答。我一直在寻找一种动态的方法,不需要硬编码一个文字“最小宽度”。请参阅我对此解决方案的回答。 – maxp

+0

嗨马克斯,技术上这是你的问题的正确答案,但我可以理解你想要的东西,你没有表达。无论如何,MinWidth是答案。 –