【问题标题】:Disable Drag-drop from TextBox禁用从 TextBox 拖放
【发布时间】:2010-03-30 13:24:32
【问题描述】:

我有一个声明为 ReadOnly 的 WPF 文本框

<TextBox IsReadOnly="True" IsTabStop="False" Width="200" />

因此,用户不能在文本框中写入任何内容或删除内容,但它仍然允许用户从该文本框中拖动文本并将其拖放到导致文本从第一个文本框中删除的任何其他文本框中(只读一)那是出乎意料的。它是一个错误吗? 我怎样才能摆脱这个?

【问题讨论】:

    标签: c# wpf textbox readonly drag


    【解决方案1】:

    我尝试了以下代码:

    <StackPanel>
        <TextBox IsReadOnly="True">Hello</TextBox>
        <TextBox></TextBox>
    </StackPanel>
    

    当我将文本(选择后)从第一个 TexbtBox 拖放到第二个文本框时,文本会被复制,但不会从第一个 TextBox 中删除。我在 .NET 3.5 和 .NET 4.0 目标下尝试过。

    如果您想摆脱错误而不试图理解它(因为它不应该发生),您可以在 TextBox 顶部放置一个空控件(Canvas 可以),并设置其 Background 属性透明。

    <Grid>
        <TextBox IsReadOnly="True" IsTabStop="False" Width="200" />
        <Canvas Background="Transparent"/>
    </Grid>
    

    但是文本将不再可选择...

    【讨论】:

    • 在我的情况下,它从第一个文本框中删除并下降到第二个,当我将文本(选择后)从第一个文本框拖放到第二个文本框时,你的技巧很好并且可能有效,但我期待文本框本身可以禁用此行为!
    • 我尝试将 IsReadOnly 设置为 False,现在当我拖放它时,文本会被删除。因此,您可能会在您的代码中更改此属性而不知道可能...尝试创建一个新项目,并进行我在帖子顶部描述的小测试。如果文本被删除,那么您有一个严重的 .NET 问题,如果没有,解决方案可能存在于您的代码中...
    • 终于找到了原因。我正在将 TextBox 的 Text 属性与一些依赖属性说 MyText 绑定。我正在使用 CoerceValueCallback 机制,在此处理程序中,我将验证 MyText 属性并在验证失败时将其更新为空白,或者在验证成功时将其更新为其他值。自从我从文本框中拖放文本时调用我的处理程序以来,问题就出现了。并且在处理程序中 MyText 属性遍历所有验证逻辑并失败,因为它不是预期的并设置为空白。
    • 但我找不到为什么 coercevaluecallback 在拖放时被调用?你能告诉我原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多