关于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>
...全文
818 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MooWeii 2023-01-09
  • 打赏
  • 举报
回复

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

zaaserz 2020-02-05
  • 打赏
  • 举报
回复
引用 1 楼 groveer 的回复:
第一种:将添加按钮提出来作为固定按钮 第二种:将添加按钮也放进ItemsControl.ItemTemplate中,绑定一个属性作为显示或隐藏,然后后台管理你的itemssource就行了多添个属性而已
感谢回复,我采用了你建议的第二种方式,在itemSource最后新加了一项,然后使用模板选择器进行选择。最后实现了想要的效果
groveer 2020-02-04
  • 打赏
  • 举报
回复
第一种:将添加按钮提出来作为固定按钮 第二种:将添加按钮也放进ItemsControl.ItemTemplate中,绑定一个属性作为显示或隐藏,然后后台管理你的itemssource就行了多添个属性而已
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

110,500

社区成员

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

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

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