【问题标题】:WPF Thumb Drag and Drop only on a specific controlWPF Thumb 仅在特定控件上拖放
【发布时间】:2016-05-12 19:43:03
【问题描述】:

我正在开发 WPF 应用程序的一部分,该应用程序采用包裹在 Thumb 标记中的许多控件,并且将有一些“井”能够仅接受特定的 Thumb 控件。我写了一个非常简单的例子来演示我正在使用什么。

MainWindow.xaml

<Window x:Class="DragDropExample2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:local="clr-namespace:DragDropExample2"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Canvas>
    <Thumb x:Name="Circle" Canvas.Right="10" Canvas.Top="20" DragDelta="Thumb_OnDragDelta">
        <Thumb.Template>
            <ControlTemplate>
                <Ellipse x:Name="circleUI" Height="100" Width="100" Fill="Blue"/>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>
    <Ellipse x:Name="circleWell" Height="100" Width="100" Canvas.Left="10" Canvas.Bottom="20" StrokeThickness="1" Stroke="Black"/>
</Canvas>
</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Thumb_OnDragDelta(object sender, DragDeltaEventArgs e)
    {
        UIElement thumb = e.Source as UIElement;

        Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);
        Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
    }
}

所以,本质上我想要做的是有拖动蓝色圆圈的动画,并且只能将它放在空圆圈中,也许当鼠标在空圆圈内时。将其放在页面上的其他任何位置都会将其返回到原来的位置。我不知道是否有可能让 Thumb 控件保留的鼠标事件可供应用程序的其余部分访问。

我需要帮助的是检查控件(在本例中为 circleWell)是否在 Circle Thumb 控件下,因此是有效的下降。否则将 Circle 返回到它的原点。

我想也许做一个 DragCompleted 事件来比较鼠标位置和目标值的范围 (Circle) 将是一个很好的方法,但如果它不在范围内可以防止丢弃 Circle,我更喜欢它可接受的界限。如果无法防止掉落,我可以使用 DragCompleted 事件。如果鼠标的坐标不在 circleWell 边界内,我想要的工作流会将 Circle 返回到它的起始位置,否则,如果 Circle 在可接受的范围内,我希望它(Circle)“捕捉”以覆盖容器控件(圈子)。

【问题讨论】:

  • “它难倒我” -- 具体来说,它是如何难倒你的?你试过什么?那段代码做了什么?你想让它做什么?请提供一个好的minimal reproducible example,清楚地显示您尝试过的内容,并准确描述您遇到的具体问题。
  • @PeterDuniho 我在原始问题中添加了一些说明和附加信息。很抱歉含糊不清。

标签: c# wpf xaml


【解决方案1】:

通过创建被点击的控件的自定义光标并且拖放基于布尔值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2015-11-17
    • 2014-04-27
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多