解决WPF item的高度适应控件自身的大小,而不是每个item高度都固定一样

最近有个需求,将一些自定义的控件显示在ItemsControl中,通过绑定的方法却发现每个item的高度一样,并非是自定义控件本身的高度,网上搜了堆调整item高度的方法未果,只好自己动手
如图是未达到期望效果时的代码图
在这里插入图片描述
在这里插入图片描述
主程序代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
显然这并非预期的效果
既然item的高度和宽度不好设置那就看看
Test1,Test2的高度和宽度
在这里插入图片描述
在这里插入图片描述
效果是有了,要是每个自定义控件都在生成时给高宽度赋值会很麻烦,那么它为什么不用自已本身的高度呢,通过打断点来看看
在这里插入图片描述
默认是没有设置值的,但自定义本身在设计时是有高度时为什么没有设置过来呢,这时去看看自定义控件设计时的高度用的是d:DesignHeight和d:DesignWidth,将它们改为 Height和Width试试
在这里插入图片描述
将主程序调回原样
在这里插入图片描述
在这里插入图片描述
成功了,猜测d:DesighWidth可能只针对设计时大小,实际的大小会根据容器进行自适应调整

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,WPFItemsControl可以通过Thumb来实现拖动边框来改变控件大小。可以使用Thumb控件作为ItemsControl中每个项的一部分,并在其拖动事件中实现大小调整逻辑。具体实现可以参考以下步骤: 1. 在ItemsControl的ItemTemplate中添加Thumb控件,设置它的样式和位置。 2. 在Thumb控件的DragDelta事件中获取鼠标拖动偏移量,并根据偏移量调整控件大小。 3. 在Thumb控件的DragCompleted事件中更新控件的布局。 以下是一个简单的示例,演示如何使用Thumb来实现拖动边框改变控件大小的功能: ```xml <ItemsControl ItemsSource="{Binding Items}"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid> <!-- 控件内容 --> <TextBlock Text="{Binding}" /> <!-- 右下角的Thumb控件 --> <Thumb Width="10" Height="10" HorizontalAlignment="Right" VerticalAlignment="Bottom" DragDelta="Thumb_DragDelta" DragCompleted="Thumb_DragCompleted"> <Thumb.Style> <Style TargetType="Thumb"> <Setter Property="Background" Value="Gray" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Thumb"> <Border Background="{TemplateBinding Background}" /> </ControlTemplate> </Setter.Value> </Setter> </Style> </Thumb.Style> </Thumb> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> ``` 在代码中,可以根据Thumb控件的DragDelta事件中的偏移量来调整控件大小: ```csharp private void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { var thumb = (Thumb)sender; var item = (FrameworkElement)thumb.DataContext; item.Width += e.HorizontalChange; item.Height += e.VerticalChange; } ``` 在Thumb控件的DragCompleted事件中更新控件的布局: ```csharp private void Thumb_DragCompleted(object sender, DragCompletedEventArgs e) { var thumb = (Thumb)sender; var item = (FrameworkElement)thumb.DataContext; item.InvalidateMeasure(); item.InvalidateArrange(); } ``` 注意,以上代码只是一个简单的示例,实际情况可能会更复杂。需要根据具体需求进行调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值