这不是你的平均“我的ScrollViewer不工作”的问题...
假设一个带网格的窗口。第0列和第1行的大小设置为Auto
,第1列和第0行设置为*
。 (重要)
在单元格[0,0]中,ItemsControl
内的StackPanel
内有一个ScrollViewer
的模板Grid
。原因很简单:如果不能显示ItemsControl
中的所有项目,则显示滚动条。垂直滚动条的可见性设置为Auto
(重要)
在Cell [1,1]中,有Button
显示其宽度。
如果窗口太小也会显示ItemsControl
中的所有项目,这将导致以下情况:
滚动条将在那里,但它不可见。它正在工作,因为我可以使用鼠标滚轮滚动。原因似乎是包含ItemsControl
的网格列不会自动扩展以为滚动条腾出空间。
如果我更改(几乎)任何参数,滚动条将按预期显示,第二列的大小将减小。 任何人都可以解释这种奇怪的行为吗?
其他信息:
以下参数更改将导致滚动条变为可见:
*
Auto
*
Button
。Button
移至[0,1]或[1,0] ItemsControl
。VerticalScrollBarVisibility
中ScrollViewer
的{{1}}设置为ItemsControl
。但是,将[1,1]中的按钮更改为其他内容,例如另一个Visible
不会改变奇怪的行为,所以它与按钮无关。此外,将ItemsControl
的宽度更改为小于第二列的内容,也不会删除该行为。
完整的复制示例代码:
Button
答案 0 :(得分:2)
看起来它可能是WPF中的已知错误。 This question处理ListBox的ScrollViewer,但我认为主体是相同的。
作为替代方案,你可以在ScrollViewer后面添加一些东西,它的宽度绑定到ScrollViewer的ActualWidth,这会强制列绘制正确的大小
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollViewer x:Name="Test" Grid.Row="0" Grid.Column="0"
VerticalScrollBarVisibility="Auto">
<Button Content="Column1" Height="500" />
</ScrollViewer>
<Grid Grid.Column="0" Grid.Row="0"
Width="{Binding ElementName=Test, Path=ActualWidth}" />
<Button Content="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"
Grid.Column="1" Grid.Row="1" />
</Grid>