如何解决无法让 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 举报,一经查实,本站将立刻删除。