网格忽略 WPF 中的 ClipToBounds
Grid ignores ClipToBounds in WPF
给定一个非常基本的 Grid
,ColumnDefinition
的宽度设置为 *
,其中包含的按钮的硬编码宽度属性将被忽略,并且这些子元素将被剪裁。它们不会被宽度设置为 Auto
.
的剪裁
如果在每个 ColumnDefinition
上都设置了正确的 MinWidth
,则可以防止这种剪裁,但这并不是完全动态的。
我做错了什么还是这是最好的 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>
我希望按钮在有空间时显示为第一张图片,在有空间时显示为图片三(即在任何情况下都不会剪裁)。
只需在网格中添加一个 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>
啊我已经解决了如下:
关键是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>
给定一个非常基本的 Grid
,ColumnDefinition
的宽度设置为 *
,其中包含的按钮的硬编码宽度属性将被忽略,并且这些子元素将被剪裁。它们不会被宽度设置为 Auto
.
如果在每个 ColumnDefinition
上都设置了正确的 MinWidth
,则可以防止这种剪裁,但这并不是完全动态的。
我做错了什么还是这是最好的 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>
我希望按钮在有空间时显示为第一张图片,在有空间时显示为图片三(即在任何情况下都不会剪裁)。
只需在网格中添加一个 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>
啊我已经解决了如下:
关键是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>