gpt4 book ai didi

wpf - 在ScrollViewer中嵌入ItemsControl

转载 作者:行者123 更新时间:2023-12-04 18:14:24 25 4
gpt4 key购买 nike

我研究了几个与ScrollViewer相关的问题,但没有一个对我有用。这几乎可以肯定归结于我对元素大小缺乏理解。首先,我的XAML(除了UserControl定义,这是整个控件):

<DockPanel Width="Auto">
<ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" CanContentScroll="True" BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1" Background="{DynamicResource LightGradientBackgroundBrush}">
<ItemsControl Focusable="false" Width="Auto" MinHeight="30" ItemsSource="{Binding RequiredFields}" OverridesDefaultStyle="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="3,0,3,3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding Path=Header, Mode=OneTime}" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="0"/>
<TextBox Text="{Binding Path=Value}" HorizontalAlignment="Stretch" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</DockPanel>

此控件作为内容加载在选项卡中。承载选项卡的窗口是可调整大小的,并且选项卡内容的最小大小为60。我正在尝试做的是让scrollviewer填充选项卡,但不要将选项卡推到窗口的边界之外。使用上面的XAML,多余的内容会导致选项卡的高度扩大,并且滚动条会出现在“窗口”而不是“选项卡”上。

滚动查看器正在扩展到其子代的大小,因此将标签的高度往外推。我想要的是将滚动查看器固定在选项卡的大小上,并使滚动查看器中的内容在滚动查看器的范围内增长,以便在内容过多时显示滚动条。

我要去哪里错了?

编辑:

问题是高度,而不是宽度。宽度显示应有的状态。我已按照建议将包装器更改为网格,但是除非设置了Height属性,否则网格将扩展以适合展开的scrollviewer的内容,从而导致与以前相同的问题。

更新的XAML:
<Grid MinHeight="60" VerticalAlignment="Top">
<Border BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1">
<ScrollViewer
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Visible"
CanContentScroll="True"
BorderBrush="{DynamicResource PanelBorder}"
BorderThickness="1,1,1,1"
Background="{DynamicResource LightGradientBackgroundBrush}"
>
<ItemsControl Focusable="false" Width="Auto" MinHeight="30" ItemsSource="{Binding RequiredFields}" OverridesDefaultStyle="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="3,0,3,3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding Path=Header, Mode=OneTime}" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="0"/>
<TextBox Text="{Binding Path=Value}" HorizontalAlignment="Stretch" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</ScrollViewer>
</Border>
</Grid>

以下答案均无助于这项工作,但我相当有信心,答案在大多数情况下都会奏效。

我的控件托管在选项卡页面中。它是动态加载的,我无法控制选项卡页的设计方式。我的直觉是,选项卡控件所允许的空间与其中的内容一样多。因为我控件中的网格说要用完所有可用空间,并且选项卡页提供了子容器所需的空间,itemscontrol试图使用网格提供的空间;它最终在标签页中扩展,以包含整个ItemsControl内容。

如果创建的选项卡页面无法扩展以适合其内容,则下面的解决方案将起作用。不幸的是,我认为情况并非如此。

一整天都在浪费。分手后要往前看了。

最佳答案

嗯,是的,有时WPF布局错综复杂。杀死您的是ItemsControl上DockPanel和Width =“Auto”的组合。 DockPanel告诉其子级,他们可以拥有所需的布局空间。然后,您的ItemsControl告诉它的 child 相同的事情。最后,Window创建一个ScrollViewer来处理超大内容。

用网格替换外部的DockPanel,一切都应该很好。

关于wpf - 在ScrollViewer中嵌入ItemsControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com