【问题标题】:WPF/C#: Disable Drag & Drop for TextBoxes?WPF/C#:禁用文本框的拖放?
【发布时间】:2009-07-15 11:54:52
【问题描述】:

有没有人知道如何为我的所有 TextBox 元素禁用拖放功能? 我找到了 here 的东西,但这需要我为所有元素运行一个循环。

【问题讨论】:

    标签: c# wpf textbox drag-and-drop


    【解决方案1】:

    在 InitializeComponent() 之后使用以下内容

    DataObject.AddCopyingHandler(textboxName, (sender, e) => { if (e.IsDragDrop) e.CancelCommand(); });
    

    【讨论】:

    • 对于任何想要这样做的人来说,这是迄今为止从代码中完成的最简单的方法。完整的解释在这里:switchonthecode.com/tutorials/…
    • @stone 此链接现已失效。
    【解决方案2】:

    您可以轻松地将本文描述的内容包装到附加的属性/行为中......

    即。 TextBoxManager.AllowDrag="False"(有关更多信息,请查看这两篇 CodeProject 文章 - Drag and Drop Sample 和 Glass Effect Samplelink text

    或者尝试新的 Blend SDK 的行为

    更新

    • 另请阅读 Bill Kempf 关于附加行为的 this 文章
    • 正如 kek444 在 cmets 中指出的那样,您只需使用此附加属性集为 textbxo 创建一个默认样式!

    【讨论】:

    • 当然,如果需要节省一些手工操作,请将附加属性设置为 TextBox 的默认样式。
    【解决方案3】:

    创建您的所有者用户控件 ex MyTextBox: TextBox 并覆盖:

        protected override void OnDragEnter(DragEventArgs e)
        {
            e.Handled = true;
        }
    
        protected override void OnDrop(DragEventArgs e)
        {
            e.Handled = true;
        }
    
    
        protected override void OnDragOver(DragEventArgs e)
        {
            e.Handled = true;
        }
    

    【讨论】:

    • 这不起作用。它可以防止下降,但不会从控件中拖动。此外,当您将文本从文本框中放到其他地方时,可能会发生可怕的事情。
    • @Mark,可怕的例子?
    • 对不起,我希望我能记住。
    【解决方案4】:

    我个人创建了一个不允许拖动的自定义TextBox控件如下:

    /// <summary>
    /// Represents a <see cref="TextBox"/> control that does not allow drag on its contents.
    /// </summary>
    public class NoDragTextBox:TextBox
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="NoDragTextBox"/> class.
        /// </summary>
        public NoDragTextBox()
        {
            DataObject.AddCopyingHandler(this, NoDragCopyingHandler);
        }
    
        private void NoDragCopyingHandler(object sender, DataObjectCopyingEventArgs e)
        {
            if (e.IsDragDrop)
            {
                e.CancelCommand();
            }
        }
    }
    

    使用 local:NoDragTextBox 代替使用 TextBox,其中“local”是 NoDragTextBox 程序集位置的别名。上述相同的逻辑也可以扩展以防止在 TextBox 上复制/粘贴。

    更多信息请查看http://jigneshon.blogspot.be/2013/10/c-wpf-snippet-disabling-dragging-from.html上述代码的参考

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 2016-10-07
      • 2011-05-15
      • 2010-12-08
      • 2019-08-15
      • 2010-12-17
      • 1970-01-01
      • 2018-07-15
      相关资源
      最近更新 更多