gpt4 book ai didi

.net - 使 WrapPanel 尊重他 parent 的宽度

转载 作者:行者123 更新时间:2023-12-04 11:29:41 24 4
gpt4 key购买 nike

好的,这是我的代码。请注意,StackPanel 直接位于 UserControl 中。

<UserControl>
<StackPanel Orientation="Horizontal">

<ScrollViewer Width="450"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">

<Rectangle Width="400" Height="4000" Fill="BlanchedAlmond"/>
</ScrollViewer>

<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">

<ItemsControl BorderBrush="Green"
BorderThickness="2"
ItemsSource="{Binding Path=MyObservableCollection}"
ItemTemplate="{StaticResource FatTemplate}">

<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

</ItemsControl>
</ScrollViewer>

</StackPanel>
</UserControl>

( 代码已编辑 )

请注意,矩形就在那里,因为该滚动查看器的内容无关紧要。

问题是 WrapPanel 只是水平扩展并且不换行......

我找到了一些解决方案:
  • 为 WrapPanel 提供绝对宽度(但它不会随窗口调整大小)。
  • 将宽度绑定(bind)到其父宽度 - ItemsControl 或 ScrollViewer(ScrollViewer 在这种有限的情况下效果更好)。
    Width="{Binding RelativeSource=
    {RelativeSource FindAncestor,
    AncestorType={x:Type ScrollViewer}},
    Path=ActualWidth}"

  • 这种技术的问题是,如果一个控件在 StackPanel 或 Grid 的旁边,您需要将它绑定(bind)到它的父大小减去它旁边的控件。然后是困难的事情。我构建了一个转换器,它对收到的数字应用数学运算,因此我可以从其父宽度中减去给定的宽度:
    Width="{Binding RelativeSource=
    {RelativeSource FindAncestor,
    AncestorType={x:Type UserControl}},
    Path=ActualWidth,
    Converter={StaticResource Convertisseur_Size_WXYZ},
    ConverterParameter=-260}"

    但是,由于您无法绑定(bind)传递给 ConverterParameter 的值,
    ConverterParameter={Binding ...} (doesn't work)

    我想:
  • 为了能够很好地调整我的 WrapPanel 和 ScrollViewer 的大小,
  • 我的 UserControl 易于维护,
  • 我的代码比这些依赖父控件类型的大绑定(bind)表达式更干净。

  • 什么是更好的解决方案?

    注意:如果有什么不清楚的,我可以补充细节。

    最佳答案

    为什么会在 ScrollViewer 时换行允许水平滚动?您应该在 ScrollViewer 中禁用水平滚动。 :

    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">

    编辑后编辑:这是因为您的 StackPanel是水平方向的。一个横向的 StackPanel将给它的 child 要求的任何宽度 - 它根本不会限制它。使用正确的面板,你会没事的。可能你只想要一个 Grid有两列。

    关于.net - 使 WrapPanel 尊重他 parent 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539186/

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