微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法让 ScrollViewer 在 ItemsControl>WrapPanel 中工作

如何解决无法让 ScrollViewer 在 ItemsControl>WrapPanel 中工作

我有以下代码

<ItemsControl
  ItemsSource="{Binding ItemsList}"
  Visibility="{Binding HmiState,Converter={StaticResource IsHmiViewState}}">
  <ItemsControl.ItemsContainerStyle>
    <Style>
      <Setter Property="FrameworkElement.Margin" Value="5" />
    </Style>
  </ItemsControl.ItemsContainerStyle>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Width=300 Height=200 ItemsHost="True"
           ScrollViewer.CanContentScroll="True"
           ScrollViewer.VerticalScrollVisibility="Auto" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>

它可以正确显示 200 高度以内的所有内容(已包装),但不显示低于 200 的任何内容,并且没有滚动条。
ItemsList 是一个 ObservableCollection。

大家有什么建议吗?

解决方法

ItemsControl 的 ControlTemplate 中应该有一个承载 ItemsPresenter 的 ScrollViewer:

<ItemsControl ItemsSource="{Binding ItemsList}" Width="300" Height="200">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <ScrollViewer>
                <ItemsPresenter/>
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Margin" Value="5" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>
,

我想出了另一种方式,才看到有一个答案在等着我。基本上只是将我拥有的内容包装在 ScrollViewer 中。一个比另一个“更好”吗?

 const QUrl registryUrl = QUrl(QStringLiteral("tcp://serverIpAddressHere:65212"));

QRemoteObjectNode repNode(registryUrl);

QRemoteObjectNode::RemoteObjectSchemaHandler setupTcp = [&repNode](QUrl url) -> void {
    QTcpSocket *socket = new QTcpSocket(&repNode);
    QObject::connect(socket,&QTcpSocket::connected,[socket,&repNode]() -> void {
        qDebug() << "Added client side connection";
        repNode.addClientSideConnection(socket);
    });
    QObject::connect(socket,QOverload<QAbstractSocket::SocketError>::of(&QSslSocket::error),[socket](QAbstractSocket::SocketError) -> void {
        qDebug() << "Deleted socket";
        delete socket;
    });
    qDebug() << "Connected to host with URL: " << url.host() <<":" << url.port();
    socket->connectToHost(url.host(),url.port());
};

repNode.registerExternalSchema(QStringLiteral("exttcp"),setupTcp);

QSharedPointer<QRemoteObjectReplica> ptr;
ptr.reset(repNode.acquire<FileManagerReplica>());
Client client(ptr);

//Do work with client

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。