关于Wpf 布局问题WrapPanel换行后占用整行

zaaserz 2020-02-04 04:49:54
在项目中遇到一个问题,想在展示界面添加一个动态添加控件的功能。

因为不知道控件数量所以使用了WrapPanel自动换行,但在换行到新行时WrapPanel会占用整行,然后就让界面看起来很不友好,

是否可以解决WrapPanel换行后不占用整行的问题,或者使用其余手段将添加控件“浮动”至WrapPanel真正布局后面
代码如下
  <WrapPanel   Background="White" Orientation="Horizontal">
<WrapPanel.Resources>
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Cursor" Value="Hand"/>
</Style>
</WrapPanel.Resources>
<!--展示-->
<ItemsControl ItemsSource="{Binding CommunicationModels}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel>
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<WrapPanel Orientation="Horizontal">
<Button Margin="5" Height="80" Width="130">
<Button.Content>
<GroupBox Height="80" Width="130"
Background="#FF5696D8"
silver:GroupBoxHelper.HeaderPadding="0">
<GroupBox.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Background="{x:Null}"
Text="{Binding DeviceId, StringFormat=Id:{0}}" />
</StackPanel>
</GroupBox.Header>
<GroupBox.Content>
<StackPanel Orientation="Vertical">
<TextBlock Height="25" VerticalAlignment="Top"
Background="{x:Null}"
Text="{Binding SerialPort.PortName,StringFormat=串口号:{0}}"/>
<TextBlock Height="25" VerticalAlignment="Top"
Background="{x:Null}"
Text="{Binding SerialPort.BaudRate,StringFormat=波特率:{0}}"/>
</StackPanel>
</GroupBox.Content>
</GroupBox>

</Button.Content>
</Button>
</WrapPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!--添加按钮-->
<Button Margin="5"
Command="{Binding AddDeviceCommand}">
<Button.Content>
<Grid Height="80" Width="130" Background="#FF5696D8" >
<TextBlock
FontSize="35"
HorizontalAlignment="Center" VerticalAlignment="Center">

</TextBlock>
</Grid>
</Button.Content>
</Button>
</WrapPanel>
...全文
976 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MooWeii 2023-01-09
  • 打赏
  • 举报
回复

可以分享一下源码吗, 也想实现这个功能

zaaserz 2020-02-05
  • 打赏
  • 举报
回复
引用 1 楼 groveer 的回复:
第一种:将添加按钮提出来作为固定按钮 第二种:将添加按钮也放进ItemsControl.ItemTemplate中,绑定一个属性作为显示或隐藏,然后后台管理你的itemssource就行了多添个属性而已
感谢回复,我采用了你建议的第二种方式,在itemSource最后新加了一项,然后使用模板选择器进行选择。最后实现了想要的效果
groveer 2020-02-04
  • 打赏
  • 举报
回复
第一种:将添加按钮提出来作为固定按钮 第二种:将添加按钮也放进ItemsControl.ItemTemplate中,绑定一个属性作为显示或隐藏,然后后台管理你的itemssource就行了多添个属性而已

111,082

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧