如何阻止 Scrollviewer 扩展到无限高度?
How do I stop Scrollviewer from expanding to infinite height?
我有一个网格,有 3 行。
第 2 行的高度可变,window 可调整大小,我在第 3 行有一个数据网格,保存在滚动查看器中,在 tabcontrol 中。
当 scrollviewer 中有很多项目时,scrollviewer 会扩展直到达到可用的 "max height",但是最大高度是无穷大...所以它会不断增长。我想让它做的是停止扩展,如果这意味着它将父网格推出边界,而是使用它的滚动功能......这是它的总体布局:
<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
<TabItem Header="Weapons">
<ScrollViewer>
<DataGrid>
...
</DataGrid>
</ScrollViewer>
</TabItem>
</TabControl>
这是一个包含 3 行 3 列的网格。第 0 行和第 1 行中有我没有放在这里的内容,显然我从 Datagrid 等中删除了不必要的信息...
我看到的例子:
按要求,全XAML。不完全是短的,这就是为什么我认为上面的简化版本会更好。 XAML - Too large to fit in post
好的,就在那里。我正在查看在网格第 2 行的选项卡控件的不同选项卡中保存的两个数据网格。
压缩"full"xaml:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="1">
<Image Source="{StaticResource EmptySlot}" Margin="0" Width="34"/>
<Image Source="{Binding AuraSlot, FallbackValue={StaticResource AuraSlot}}" Margin="0" Width="34"/>
</Grid>
<Popup AllowsTransparency="True" Placement="Relative" PlacementTarget="{Binding ElementName=MainWindowName}" IsOpen="{Binding WeaponTooltipOpen}" HorizontalOffset="{Binding WeaponOffsetX}" VerticalOffset="{Binding WeaponOffsetY}" PopupAnimation="Fade" OpacityMask="White" >
...
</Popup>
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Expander orizontalAlignment="Center">
<Expander.Header>
<TextBlock Text="Equipment Slots" HorizontalAlignment="Center" />
</Expander.Header>
<Grid Grid.Row="0" Grid.Column="1">
...
</Grid>
</Expander>
</Grid>
<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
<TabItem Header="Weapons">
<Grid>
<ScrollViewer CanContentScroll="True" >
<DataGrid Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" ItemsSource="{Binding GroupedWeapons}" AutoGenerateColumns="False" IsReadOnly="True" AlternatingRowBackground="Gainsboro" AlternationCount="2" RowHeaderWidth="0">
<DataGrid.GroupStyle>
<GroupStyle>
...
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
...
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
...
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
</Grid>
好的,终于找到问题了
我真的不知道为什么这是问题的原因,因为它对我来说真的没有意义,但是在代码中我把东西包裹在堆栈面板中。堆放在那里的唯一两件事是一个文本块和一个网格,网格包含大量其他东西,包括与问题一起发布的所有代码。取出 stackpanel 使其正常工作,所以我现在已经使用 2 个不同的行将 stackpanel 永久替换为另一个网格。 :)
我有一个网格,有 3 行。 第 2 行的高度可变,window 可调整大小,我在第 3 行有一个数据网格,保存在滚动查看器中,在 tabcontrol 中。
当 scrollviewer 中有很多项目时,scrollviewer 会扩展直到达到可用的 "max height",但是最大高度是无穷大...所以它会不断增长。我想让它做的是停止扩展,如果这意味着它将父网格推出边界,而是使用它的滚动功能......这是它的总体布局:
<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
<TabItem Header="Weapons">
<ScrollViewer>
<DataGrid>
...
</DataGrid>
</ScrollViewer>
</TabItem>
</TabControl>
这是一个包含 3 行 3 列的网格。第 0 行和第 1 行中有我没有放在这里的内容,显然我从 Datagrid 等中删除了不必要的信息...
我看到的例子:
按要求,全XAML。不完全是短的,这就是为什么我认为上面的简化版本会更好。 XAML - Too large to fit in post
好的,就在那里。我正在查看在网格第 2 行的选项卡控件的不同选项卡中保存的两个数据网格。
压缩"full"xaml:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="1">
<Image Source="{StaticResource EmptySlot}" Margin="0" Width="34"/>
<Image Source="{Binding AuraSlot, FallbackValue={StaticResource AuraSlot}}" Margin="0" Width="34"/>
</Grid>
<Popup AllowsTransparency="True" Placement="Relative" PlacementTarget="{Binding ElementName=MainWindowName}" IsOpen="{Binding WeaponTooltipOpen}" HorizontalOffset="{Binding WeaponOffsetX}" VerticalOffset="{Binding WeaponOffsetY}" PopupAnimation="Fade" OpacityMask="White" >
...
</Popup>
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Expander orizontalAlignment="Center">
<Expander.Header>
<TextBlock Text="Equipment Slots" HorizontalAlignment="Center" />
</Expander.Header>
<Grid Grid.Row="0" Grid.Column="1">
...
</Grid>
</Expander>
</Grid>
<TabControl Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3">
<TabItem Header="Weapons">
<Grid>
<ScrollViewer CanContentScroll="True" >
<DataGrid Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" ItemsSource="{Binding GroupedWeapons}" AutoGenerateColumns="False" IsReadOnly="True" AlternatingRowBackground="Gainsboro" AlternationCount="2" RowHeaderWidth="0">
<DataGrid.GroupStyle>
<GroupStyle>
...
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
...
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
...
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
</Grid>
好的,终于找到问题了
我真的不知道为什么这是问题的原因,因为它对我来说真的没有意义,但是在代码中我把东西包裹在堆栈面板中。堆放在那里的唯一两件事是一个文本块和一个网格,网格包含大量其他东西,包括与问题一起发布的所有代码。取出 stackpanel 使其正常工作,所以我现在已经使用 2 个不同的行将 stackpanel 永久替换为另一个网格。 :)