首页 文章

ComboBox VirtualizingStackPanel宽度错误?

提问于
浏览
2

当使用ComboBox和VirtualizingStackPanel时,我们在Silverlight应用程序中遇到问题 . 当ComboBox项的宽度明显宽于控件本身时以及当项目仅在滚动后可见(即在加载时不可见)时,会出现问题 . 使用相当长的项目列表,ComboBox滚动变得疯狂 .

做一些谷歌搜索我只能看到一个评论描述我们正在经历但没有我能找到的解决方案 . 这似乎是一个错误,但也许我们要么做错了或者有一个解决方法 . 标记很简单,大致如下所示

<ComboBox>
  <ComboBox.ItemsPanel>
    <ItemsPanelTemplate>
      <VirtualizingStackPanel />
    </ItemsPanelTemplate>
  </ComboBox.ItemsPanel>
</ComboBox>

顺便说一句,ComboBoxItems是简单的文本 . 没有图形或其他对象 .

1 回答

  • 1

    我遇到了同样的问题,最后需要为组合框定义一个项目模板,并强制项目的宽度与外部列宽的宽度相匹配 . 这使文本换行到多行,但您可以将其更改为使用 TextTrimming="WordEllipsis" 来修剪文本项 .

    <Grid>
      <Grid.ColumnDefinitions>
        ...
        <ColumnDefinition Width="..." x:Name="cbColumn" />
      </Grid.ColumnDefinitions>
      <ComboBox>
        <ComboBox.ItemsPanel>
          <ItemsPanelTemplate>
            <VirtualizingStackPanel />
          </ItemsPanelTemplate>
        </ComboBox.ItemsPanel>
        <ComboBox.ItemTemplate>
          <DataTemplate>
            <TextBlock TextWrapping="Wrap" Width="{Binding ActualWidth, ElementName=cbColumn}" />
          </DataTemplate>
        </ComboBox.ItemTemplate>
      </ComboBox>
    </Grid>
    

    在我的情况下,我并不总是知道组合框需要的大小,所以这就是我使用绑定到网格列的原因 . 如果您知道组合框的大小,可以直接在项模板中设置宽度 .

相关问题