【问题标题】:How to prevent ItemsControl from horizontally stretching to fit children如何防止 ItemsControl 水平拉伸以适合儿童
【发布时间】:2014-05-15 07:50:21
【问题描述】:

我有一个 ItemsControl,没什么特别的:-

<ItemsControl ItemsSource="{Binding ...}"
              ItemTemplate="{StaticResource ...}" />

ItemTemplate 包含以下 XAML:-

<Border BorderThickness="0,0,0,1"
        BorderBrush="LightGray"
        Padding="0,2,0,2">
    <Grid>
        <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*"
                               SharedSizeGroup="Prompt" />
             <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0"
                   Text="{Binding ...}" />
        <NumericUpDown Grid.Column="1"
                       Width="75"
                       Text="{Binding ...}" />
    </Grid>
</Border>

这会产生一个如下所示的 UI:-

但是,如果 TextBlock 中的文本很长,它会将 NumericUpDown 推离 r.h。 ItemsControl 的边缘,例如:-

我希望一旦 NumericUpDown 被“推高”到 r.h.在 ItemsControl 的边缘,TextBlock 将开始被截断。我假设当前行为是由于 ItemsControl 使用 StackPanel 作为其项目呈现器。我怎样才能让它做我想做的事?

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    当您使用SharedSizeGroupGrid.IsSharedSizeScope="True" 时,该列的星号大小被视为Auto,而不是官方信息here

    IsSharedSizeScope 不应用于安排问题中描述的控件。您应该删除所有SharedSizeGroup 属性并将ItemsControl's HorizontalAlignment 设置为Left

    【讨论】:

      【解决方案2】:

      我认为您可能想尝试在您的ItemsControl 上将Control.HorizontalContentAlignment Property 设置为Stretch。根据链接页面,这是:

      获取或设置控件内容的水平对齐方式。

      在简单的英语中,这意味着它应该将渲染的子项或项目的Width 设置为与ItemsControl 相同的Width

      【讨论】:

      • 恐怕这行不通 - 结果和以前一样。
      【解决方案3】:

      经过多次陷入死胡同认为我可以通过更改 ItemsPresenter 或 ItemsPanel 来解决这个问题,我最终在我的 ItemTemplate 中使用了 DockPanel,而不是网格:-

      <Border BorderThickness="0,0,0,1"
              BorderBrush="LightGray"
              Padding="0,2,0,2">
          <DockPanel LastChildFill="true">
              <NumericUpDown DockPanel.Dock="Right"
                             Width="75"
                             Text="{Binding ...}" />
      
              <TextBlock Text="{Binding ...}" />
          </DockPanel>
      </Border>
      

      我不完全确定为什么 DockPanel 尊重父 ItemsControl 的大小,而 Grid 却乐于水平“超出”边缘。这是我仍在努力解决的 WPF 的一个方面 - 哪些控件的大小受其父级的影响,哪些受其子级的大小影响!

      【讨论】:

        猜你喜欢
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 2012-08-16
        • 2020-11-05
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        相关资源
        最近更新 更多