垂直滚动条显示时调整内部控件宽度

时间:2017-01-13 21:10:17

标签: wpf xaml

我有:

<DockPanel>
  <!-- Left Panel -->
  <LocalViews:MyView1 DockPanel.Dock="Left" Width="250" />

并在MyView1

<DockPanel>
 <Button ...

 <ListBox>
   <ItemsControl.ItemTemplate>
    <DataTemplate>
      <GroupBox>
        <!-- stuff here -->
        ...
    </DataTemplate>

我不知道这是否相关,但我完全覆盖了默认的ListItem样式,因为我希望它看起来像ItemTemplate,但得到了支持SelectedItem

<Style TargetType="ListBox" x:Key="XXX" BasedOn="{StaticResource {x:Type ListBox}}">
    <Style.Resources>
        <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <ContentPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Style.Resources>
</Style>

默认情况下,垂直滚动条不显示(正常),当我调整窗口大小并减小可用高度时,它会显示(也很好)。问题是,垂直滚动条会导致水平滚动条。我不想要那个。

enter image description here

enter image description here

让我疯狂的是,在Designer(VS)中看起来很不错:

enter image description here

我已经看到了在内部控件侧面留有额外空间的解决方案,以允许滚动条出现,以及滚动条始终可见的另一个解决方案,因此它不会出现这样的情况。跳出来#39;我也不喜欢。

我的问题是 - 我将哪种样式应用于列表框项目模板,以便在显示垂直滚动条时,项目会调整其宽度以适应现在缩小的可用水平空间?

2 个答案:

答案 0 :(得分:1)

您如何调整窗口大小(或父容器)?在没有任何更多信息的情况下,只有一个小的情况,两个滚动条看起来像你描述的那样 - 托管滚动查看器的容器的宽度在内容的最小宽度和内容的最小宽度加上宽度之间滚动条本身。

通常,当高度降低到最小高度以下时,垂直滚动条似乎没有问题。与水平和宽度相似。只有当这两者重合时,它们才会相互“触发”。以下是这三种情况,看看它是如何在触发发生时只有10by10(ish)的像素大小?这是不太可能的:

enter image description here

我认为这是一个问题的唯一原因是它是否是默认状态。用户发生将窗口大小设置在正确位置以使其成为常规出现的可能性非常小。如果确实发生了这种情况,请说出'关键'分辨率,并且你的内容是固定的 - 将内部的宽度改变几个像素,直到它没有。

这种情况经常发生的另一个原因是,如果您根据内容调整窗口大小,例如SizeToContent="WidthAndHeight"(或SizeToContent =“Width”)。这告诉您的窗口将自身大小调整到可能的最小宽度。问题是,添加滚动条会导致此行为。

您可以最大限度地启动窗口,或者以合理的分辨率启动窗口。或者创建一些合理的逻辑/行为来调整起始窗口大小比SizeToContent="WidthAndHeight"提供的大一点。

修改

我看到你将父容器的宽度设置为绝对值250.尝试将其设置为270(Windows 10上滚动条的默认宽度为17px)。

您是否也在某处手动将ListBox的内容设置为250宽度?如果内容和容器都是250,那么当滚动条出现时,除了水平滚动之外没有别的办法了。

因为在我的结尾有一个相同的结构不会发生这种情况:

enter image description here

自然的结论是它是群组的内容。尝试对此进行评论以确认。它的布局不太好!

答案 1 :(得分:0)

您尝试过吗:

<DockPanel>
  <Button DockPanel.Dock="Top" />
  <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
           ScrollViewer.VerticalScrollBarVisibility="Auto"
           HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <GroupBox>
          ...Your Content Here...
        </GroupBox>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</DockPanel>

我看不到,您的ListBox-Style应该为您做什么,尤其是您没有在示例代码段中引用该样式...但是...

您的ListboxItems现在应该适合水平空间,无论是否具有垂直滚动条