问题描述
<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