在 WPF 中向上/向下移动 ListBoxItem

2024-05-03

我创建了一个包含文件名的列表框。我想为用户提供一个选项,可以使用上/下按钮并使用拖放来上下移动文件名。

任何人都知道如何实现此功能。

XAML 代码:

<ListBox
    Grid.Column="0"
    Name="listBox1"
    AllowDrop="True"
    Drop="listBox1_Drop"
/>
<StackPanel
    Grid.Column="1"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Center">
    <Button
        Name="moveUp"
        Content="Ç"
        FontFamily="Wingdings 3"
        Margin="3,3,3,3"
        Click="moveUp_Click" />
    <Button
        Name="moveDown"
        FontFamily="Wingdings 3"
        Content="È"
        Margin="3,3,3,3" />
</StackPanel>

如果您不想实现比上移和下移更复杂的东西,可以这样处理。如果来源看起来像这样

public ObservableCollection<FileClass> FileNames
{
    get;
    set;
}

private void moveUp_Click(object sender, RoutedEventArgs e)
{
    FileClass selectedfile = listBox1.SelectedItem as FileClass;
    int index = FileNames.IndexOf(selectedfile);
    if (index > 0)
    {
        FileNames.Remove(selectedfile);
        FileNames.Insert(index-1, selectedfile);
        listBox1.SelectedItem = selectedfile;
    }
}

private void moveDown_Click(object sender, RoutedEventArgs e)
{
    FileClass selectedfile = listBox1.SelectedItem as FileClass;
    int index = FileNames.IndexOf(selectedfile);
    if (index < FileNames.Count-1)
    {
        FileNames.Remove(selectedfile);
        FileNames.Insert(index + 1, selectedfile);
        listBox1.SelectedItem = selectedfile;
    }
}

CHANGE
尝试使用此代码通过在列表框中拖放来上下移动项目

private void listBox1_Drop(object sender, DragEventArgs e)
{
    ListBox parent = sender as ListBox;
    FileClass data = e.Data.GetData(typeof(FileClass)) as FileClass;
    FileClass objectToPlaceBefore = GetObjectDataFromPoint(parent, e.GetPosition(parent)) as FileClass;
    if (data != null && objectToPlaceBefore != null)
    {
        int index = FileNames.IndexOf(objectToPlaceBefore);
        FileNames.Remove(data);
        FileNames.Insert(index, data);
        listBox1.SelectedItem = data;
    }
}

private void listBox1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    ListBox parent = sender as ListBox;
    FileClass data = GetObjectDataFromPoint(parent, e.GetPosition(parent)) as FileClass;
    if (data != null)
    {
        DragDrop.DoDragDrop(parent, data, DragDropEffects.Move);
    }
}

private static object GetObjectDataFromPoint(ListBox source, Point point)
{
    UIElement element = source.InputHitTest(point) as UIElement;
    if (element != null)
    {
        object data = DependencyProperty.UnsetValue;
        while (data == DependencyProperty.UnsetValue)
        {
            data = source.ItemContainerGenerator.ItemFromContainer(element);
            if (data == DependencyProperty.UnsetValue)
                element = VisualTreeHelper.GetParent(element) as UIElement;
            if (element == source)
                return null;
        }
        if (data != DependencyProperty.UnsetValue)
            return data;
    }

    return null;
}

这应该完成拖放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WPF 中向上/向下移动 ListBoxItem 的相关文章

  • 在 MVVM 中设置可见性的最佳方法

    In my View我有三个对象 其中一个在任何给定时间都是可见的 在我的Model我有一个枚举来代表这三个状态 我应该如何实施我的ViewModel a 为每个对象的可见性创建一个布尔值 并将每个对象绑定到该布尔值 使用 bool gt
  • 树视图上下文菜单命令未触发

    我有一个绑定到某些属性类型的 Observable 集合的树视图 有一个 HierarchicalDataTemplate 在树视图中显示数据 现在我需要显示每个 HierarchicalDataTemplate 项目的特定上下文菜单 我使
  • WPF 中按钮的启用和禁用状态的不同图像

    我想根据按钮的状态更改下面代码中按钮的图像 即使用不同的图像来启用和禁用状态
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • 如何使用 WPF 从 XML 文件创建树视图?

    这是 XML 文件
  • WPF 模式进度窗口

    如果这个问题已经被回答了很多次 我很抱歉 但我似乎找不到适合我的答案 我想创建一个模式窗口 在我的应用程序执行长时间运行的任务时显示各种进度消息 这些任务在单独的线程上运行 我能够在过程的不同阶段更新进度窗口上的文本 跨线程通信一切正常 问
  • 获取 TreeView 中子节点的 SelectedIndex

    我目前正在使用 C 开发一个 wpf 项目 我创建了一个树视图 其中包含父节点和子节点 我想知道是否有办法获取用户单击的子节点的索引 类似于使用组合框时的 SelectedIndex 我尝试过各种方法 例如 int val TreeView
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 在包含按钮的ListView中,如何获取单击按钮的索引?

    我有一个ListView仅包含按钮 我想做的很简单 我想要获得已单击按钮的索引 列表的计数从0到100不等 因此当用户单击按钮6时 我需要这个数字进行处理 我定义了我的ListView像这样
  • 如何将 WPF UIElement 从可视化树移动到固定页面?

    我的 MVVM 应用程序使用屏幕上的视觉对象将屏幕内容渲染到打印文档 我的视图有一个ContentControl使用DataTemplate资源来确定要显示的内容 但是当我尝试将该内容添加到FixedPage对象 我得到一个Argument
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 如何将 WPF 窗口置于前面?

    我创建了一个单实例应用程序 并且希望在用户多次启动该应用程序时激活已打开的窗口 这工作正常 但我有一个问题 如果已经打开的窗口超出了另一个应用程序窗口 我必须将其放在前面 我尝试过 window Focus 和 window Show 但它
  • 如何在 wpf 应用程序的代码隐藏中创建集合视图源

    我有以下代码 public partial class MainWindow Window public MainWindow InitializeComponent var entities new DemoEntities var de
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 调用线程无法访问该对象,因为另一个线程拥有它

    我已经阅读了很多关于此错误的帖子 但我不明白如何在我的解决方案中解决它 我有一个进度条对话框 其中包含一些逻辑 通过按钮单击从 MainFrame 调用 void OnBtnClick object sender RoutedEventAr
  • ASP.NET:如何隐藏ListBox控件垂直滚动条?

    我已经尝试过CSS 溢出 自动 这不起作用 有什么办法可以实现吗 我是否需要创建我在 ASP NET 论坛上看到的自定义控件 我会像您提到的那样创建一个自定义控件 您想要的目标是什么 创建自己的滚动条以放入列表框中
  • WPF 错误:属性元素不能位于元素内容的中间。它们必须位于内容之前或之后

    我有一个MergedDictionaries and DateTemplate里面一个ResourceDictionary一切都很好 直到我添加了一个Converter

随机推荐

  • R chron times() 函数不起作用

    我正在尝试将时间转换为自午夜以来的秒数 我很难从 chron 包中获取 times 函数来工作 我的使用方法如下 gt library chron gt 24 24 60 times 50 Error in 24 24 60 times 5
  • YOUTUBE API:检索视频关键字

    最近 YouTube 决定仅向经过身份验证的开发者输出视频关键字 我注册了开发者密钥 我试图获取一个我将解析的 XML 通过请求 https gdata youtube com feeds api videos COwIYbYQUrQ ke
  • 防止 XAML/C# 中 ListView 的 Return(Enter)、向上和向下箭头键的默认行为 (Windows 10)

    当列表视图具有焦点时 按 Enter 键的默认行为是选择列表视图的第一个元素 向上和向下箭头键滚动列表视图 我试图阻止这种默认行为并连接我的自定义逻辑 我可以使用 KeyDown 为列表视图实现访问键 如下所示 代码隐藏方法 CoreWin
  • 您无权执行该操作

    我有一个时间触发的脚本 可以定期从外部源检索内容并用它更新 Google 网站页面 根据this https developers google com apps script guides triggers installable res
  • 应用程序在后台时远程推送通知 swift 3

    我有一个可以接收远程推送通知的应用程序 我已经实施了didReceiveRemoteNotification这样 func application application UIApplication didReceiveRemoteNoti
  • 包括 Oracle 中的等效项

    在 SQL Server 中你可以这样写 create index indx on T1 A B INCLUDE C D E 有没有办法在 Oracle 中做同样的事情 Refs http msdn microsoft com en us
  • 建议一种每分钟更新时间的方法

    我有一个完整的ajax应用程序 我正在使用下面的代码每分钟更新一次时间 但如果我保持浏览器打开超过 10 分钟 浏览器就会变得无响应 缓慢 建议更好的代码 function tick var d new Date var time padN
  • 如果数据表的主键是两列,您可以使用 DataTable.Contains(object key) 吗?

    如果是这样怎么办 要按主键选择 您应该使用以下之一 DataTable Rows Find Object 如果你的 PK 是一列 DataTable Rows Find Object 如果您有超过 1 列作为主键 对于类型化 DataSet
  • 键值观察和 NSButton 状态

    我试图观察复选框状态 并在复选框状态更改时在应用程序中进行适当的更改 在使用复选框管理窗口的窗口管理器中 我有以下观察者设置 void awakeFromNib myCheckBox addObserver self forKeyPath
  • 如何重定向 Groovy 脚本的输出?

    我想知道是否有任何方法可以更改我从 Java 代码执行的 groovy 脚本的默认输出 System out 这是Java代码 public void exec File file OutputStream output throws Ex
  • 从 Firestore 数组中按键/值删除项目

    我在 Firestore 中有一个数组 其结构如下 palettes 0 date 2019 05 01 name First Palette palette array 1 date 2019 05 02 name Palette 2 p
  • Django Migrate int() 的无效文字

    Django 1 7 Python 2 7 我已经制作了 sqlite 数据库 并在管理页面中向数据库添加了一些记录 然后我改变了我的模型 添加了一个外键 然后我 manage makemigrationsdjango询问了之前记录中的默认
  • 无法从超时获得自动化扩展:从渲染器接收消息超时

    使用 Selenium Webdriver C 我时不时会收到下一个错误 System InvalidOperationException 未知错误 无法从超时获取自动化扩展 从渲染器接收消息超时 3 959 会话信息 chrome 37
  • 点分隔的字符串资源名称有什么用?

    我使用 Snake style 来命名字符串资源 在某人的代码中 我发现了另一种带有点的符号 我无法找到关于这个主题的任何单词
  • 如何在 Windows 7 中配置 cabal?

    我已经在Windows 7中安装了Haskell Platform 2012 我在控制台中编写cabal update我收到消息说有新版本的阴谋集团 我写的cabal install cabal install 安装完成后 它告诉我 cab
  • 如何删除 TextBlock 周围的多余空间

    我为我的 TextBlock 设置了以下内容
  • 将嘈杂的硬币重塑为圆形

    我正在使用 JavaCV OpenCV 包装器 进行硬币检测 但是当硬币连接时我遇到了一些问题 如果我尝试侵蚀它们以分离这些硬币 它们就会失去圆形形状 如果我尝试计算每个硬币内部的像素 可能会出现问题 因此某些硬币可能会被误算为更大的硬币
  • SQL Server 2008 FileStream 与普通文件

    我正在创建一个像 youtube 这样的应用程序来存储视频 我需要一些建议 我应该使用 SQL Server FileStream 来存储视频文件 还是应该将它们存储在硬盘上的某个位置并将路径记录为 SQL Server 内的 varcha
  • 将第一行粘贴到列表中的列名称

    我有 68 个数据文件 全部具有相同的标识符 但具有不同的指示符 我将这些单独的文件转换为一个列表 其中每个数据框作为一个单独的元素 每个数据框的第一行是年份 我想将其粘贴到列名称中 我希望能够用 分隔它 例如 现在列名称为 Arbeits
  • 在 WPF 中向上/向下移动 ListBoxItem

    我创建了一个包含文件名的列表框 我想为用户提供一个选项 可以使用上 下按钮并使用拖放来上下移动文件名 任何人都知道如何实现此功能 XAML 代码