Поместите объекты внутри холста при перетаскивании - PullRequest
0 голосов
/ 10 марта 2019

Я получил следующие коды по этой ссылке https://wpf.2000things.com/2012/12/19/715-using-the-thumb-control-to-drag-objects-on-a-canvas/

<Canvas>
    <Thumb Canvas.Left="10" Canvas.Top="20" Canvas.ZIndex="99"  DragDelta="Thumb_DragDelta">
        <Thumb.Template>
            <ControlTemplate>
                <Image Width="60" Height="60" Source="Crown.jpg"/>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>
    <Thumb Canvas.Left="100" Canvas.Top="60" DragDelta="Thumb_DragDelta">
        <Thumb.Template>
            <ControlTemplate>
                <Image Width="80" Height="100" Source="HenryII.jpg"/>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>
    <Thumb Canvas.Left="30" Canvas.Top="180" DragDelta="Thumb_DragDelta">
        <Thumb.Template>
            <ControlTemplate>
                <Label Content="Westminster, 19-Dec-1154"/>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>
</Canvas>

C #

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
    UIElement thumb = e.Source as UIElement;

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

С помощью этого кода вы можете перетаскивать объекты из Canvas.

Я не хочу, чтобы объекты можно было перетаскивать на Canvas.

1 Ответ

0 голосов
/ 11 марта 2019

Вам нужно изменить свой eventHandler, чтобы проверить границы, это не даст вашей контрольной форме покинуть холст

    private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        UIElement thumb = e.Source as UIElement; //find thumb
        Canvas AccessibleArea = ((sender as Control).Parent as Canvas); //find parent Canvas
        if (!(Canvas.GetLeft(thumb) + e.HorizontalChange > AccessibleArea.ActualWidth - (sender as Control).ActualWidth) //do not pass right maximus
            && !((Canvas.GetLeft(thumb) + e.HorizontalChange) <= 0))                                                     //do not pass left minimum
        {
            Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);
        }
        if (!(Canvas.GetTop(thumb) + e.VerticalChange > AccessibleArea.ActualHeight - (sender as Control).ActualHeight) // do not pass bottom maximum
            && !((Canvas.GetTop(thumb) + e.VerticalChange) <= 0))                                                       //do not pass top minimum
        {
            Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...