繁体   English   中英

WPF Thumb拖放仅在特定控件上

[英]WPF Thumb Drag and Drop only on a specific control

我正在处理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事件,将鼠标位置与目标值(圆)的值范围进行比较,这是一个很好的方法,但是我更喜欢这样,如果它不在可接受的范围之内可以防止掉圆的话。 如果无法防止掉落,则可以使用DragCompleted事件。 我希望的工作流程是,如果鼠标的坐标不在circleWell边界内,则将Circle返回到其起始位置;否则,如果Circle在可接受的范围内,我希望它(Circle)“捕捉”以覆盖容器控件( circleWell)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM