首页 > 其他分享 >WPF 列表内容跟值来排布位置

WPF 列表内容跟值来排布位置

时间:2024-01-30 09:55:18浏览次数:18  
标签:跟值 YourList ClassA set 排布 ObservableCollection new WPF public

首先是利用 ItemsControl 来随机(或者根据绑定传的值)来分布位置

主要是用Canvas来当画布, 然后由值来调整位置

 

首先,创建实体类

public class ClassA
{
    public double UpTop{ get; set; }
    public double UpLeft{ get; set; }
}

然后再你的ViewModel 调用

public class YourViewModel : INotifyPropertyChanged
{
    private ObservableCollection<ClassA> yourList;

    public ObservableCollection<ClassA> YourList
    {
        get { return yourList; }
        set
        {
            yourList = value;
            OnPropertyChanged(nameof(YourList));
        }
    }

    public YourViewModel()
    {
        
        // 初始化 YourList 并添加 ClassA 对象
        YourList = new List<ClassA>
        {
            new ClassA { Top = 50, Left = 100 },
            new ClassA { Top = 150, Left = 200 },
            // 添加更多对象...
        };
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

 

下面是XAML代码:

        <ItemsControl Background="DimGray" ItemsSource="{Binding YourList}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Background="Red" Text="YourContent"  />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Canvas.Top" Value="{Binding UpTop}"/>
                    <Setter Property="Canvas.Left" Value="{Binding UpLeft}"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
        </ItemsControl>

这样就基本完成了,  这样加上通知后可以根据传值随时变更位置。

ObservableCollection 是什么 ,可以自己百度了解一下。

标签:跟值,YourList,ClassA,set,排布,ObservableCollection,new,WPF,public
From: https://www.cnblogs.com/falychen/p/17995841

相关文章

  • Prism:打造WPF项目的MVVM之选,简化开发流程、提高可维护性
     概述:探索WPF开发新境界,借助PrismMVVM库,实现模块化、可维护的项目。强大的命令系统、松耦合通信、内置导航,让您的开发更高效、更流畅在WPF开发中,一个优秀的MVVM库是Prism。以下是Prism的优点以及基本应用示例:优点:模块化设计: Prism支持模块化开发,使项目更易维护和扩展。......
  • 通过Demo学WPF—数据绑定(一)✨
    前言✨想学习WPF,但是看视频教程觉得太耗时间,直接看文档又觉得似懂非懂,因此想通过看Demo代码+文档的方式进行学习。准备✨微软官方其实提供了WPF的一些Demo,地址为:microsoft/WPF-Samples:RepositoryforWPFrelatedsamples(github.com)将其克隆到本地,有很多的Demo代码:新建......
  • WPF应用程序窗口
    窗口可用于1显示窗口2配置窗口的大小、位置和外观3托管特定于应用程序的内容4管理窗口的生存期窗口的属性WindowStartupLocation:窗口首次显示时的位置ShowInTaskbar:窗口是否具有任务栏按钮WindowState:指示窗口是最大化、最小化或者正常尺寸显示Topmost:是否在最顶层Icon:......
  • FluentValidation在C# WPF中的应用
    1.引言在.NET开发领域,FluentValidation以其优雅、易扩展的特性成为开发者进行属性验证的首选工具。它不仅适用于Web开发,如MVC、WebAPI和ASP.NETCORE,同样也能完美集成在WPF应用程序中,提供强大的数据验证功能。本文将深入探讨如何在C#WPF项目中运用FluentValidation进行属性验证,......
  • 2.WPF中控件类之间的继承关系
    在WPF中所有的控件都是继承DispatcherObject类,可以说在wpf中DispatcherObject是所有控件类的基类,而DispatcherObject却继承Object,而它所在的程序集是在WindowsBase.dll里。看一张图,wpf控件继承关系图 1.Shape类形状控件是WPF一大系列控件。WPF所有的形状控件都继承于Shape基......
  • WPF,ListView鼠标上下滚动方式修改
    问题:ListView在鼠标上下滚动的时候,是按照一个一个Item的高度来滚动的,有办法取消掉这样子的滚动方式吗解决方式:可以通过将ListView的ScrollViewer.CanContentScroll属性设置为False来取消掉逐个项滚动的方式。这将会启用平滑滚动,而不是基于项的高度进行滚动示例代码如下:<......
  • WPF,ListView中的Item自定义靠左还是靠右
    Item中有属性来决定是左还是右,难点在于如何将ItemTemplate扩充占满整个宽度,这样子当界面缩放的时候,Item靠左或靠右也能随着移动,其实主要是下面的代码,设置ListViewItem的HorizontalContentAlignment属性为Stretch,铺满整个宽度,示例代码如下:<ListViewx:Name="LvmqttMsg"Ba......
  • 在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
    我在前面随笔《在Winform系统开发中,对表格列表中的内容进行分组展示》,介绍了Winform程序中对表格内容进行了分组的展示,在WPF应用中,同样也可以对表格的内容进行分组展示,不过处理方式和Winform有所差异,本篇随笔同样基于SqlSugar开发框架的基础上,实现在WPF应用中实现DataGrid的分组显......
  • C# WPF 开发一个 Emoji 表情查看软件
    微软在发布Windows11系统的时候,发布过一个开源的Emoji表情fluentui-emoji。因为我经常需要里面的一些表情图片,在仓库一个个查找特别的不方便,所以我做了一个表情查看器,可以很方便的查看所有表情,同时可以定位到表情文件的位置。这套fluentui-emoji表情一共有1545个。开......
  • wpf第十一个画面
    主要使用了Grid控件、Image控件、Textblock控件、Textbox控件、ComboBox控件、Button控件、TabControl控件、DataGrid控件、 Margin属性来设置当前控件与容器控件的间距Margin=“20”//left,top,right和bottom都设置为20Margin=“20,10”//left,right设置为20,top,bottom设置为10......