Создать индивидуальный пользовательский контроль - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать пользовательский элемент управления. Я хочу нажать на кнопку, и появляется пользовательский элемент управления. Затем то, что я хочу:

  • Затем я хочу нажать на этот пользовательский элемент управления и поставить его на позицию.
  • Затем я снова нажимаю на кнопку, и появляется другой пользовательский элемент управления.
  • Затем я нажимаю на новый пользовательский элемент управления и помещаю его в позицию.

Делаем это 4 или 5 раз, после чего сохраняем RenderTransformation в файле, и первая часть завершается.

Итак, часть моего кода (просто фиктивная):

    Point _anchorPoint;
    Point _currentPoint;
    bool _isInDrag;
    private readonly TranslateTransform _transform = new TranslateTransform();

    public ucCustomizedUc(){InitializeComponent();}

    private void uc_MouseDown(object sender, MouseButtonEventArgs e)
    {
        ucControl _uccontrol = sender as ucControl;

        var _element = sender as FrameworkElement;
        _anchorPoint = e.GetPosition(null);

        if (_element!= null)
        {
            _element.CaptureMouse();
        }

        _isInDrag = true;
        e.Handled = true;

        _uccontrol.MouseDown -= uc_MouseDown;
        _uccontrol.MouseMove += uc_MouseMove;
    }

    private void uc_MouseUp(object sender, MouseButtonEventArgs e)
    {
        ucControl _uccontrol = sender as ucControl;

        if (!_isInDrag) return;
        var _element = sender as FrameworkElement;

        if (_element!= null)
        {
            _element.ReleaseMouseCapture();
        }

        _isInDrag = false;
        e.Handled = true;

        _uccontrol.MouseUp -= uc_MouseUp;
        _uccontrol.MouseMove -= uc_MouseMove;
    }

    private void uc_MouseMove(object sender, MouseEventArgs e)
    {
        ucControl _uccontrol = sender as ucControl;

        if (!_isInDrag) return;
        _currentPoint = e.GetPosition(null);

        _transform.X += _currentPoint.X - _anchorPoint.X;
        _transform.Y += (_currentPoint.Y - _anchorPoint.Y);
        _uccontrol.RenderTransform = _transform;
        _anchorPoint = _currentPoint;
    }

    private void ButtonAdd_MouseDown(object sender, MouseButtonEventArgs e)
    {
        ucControl _uccontrol = new ucControl();

        _uccontrol.MouseDown += uc_MouseDown;
        _uccontrol.MouseUp += uc_MouseUp;

        _uccontrol.Height = 50;
        _uccontrol.Width = 50;

        testgrid.Children.Add(_uccontrol);
    }
}

}

И мой xaml:

    <Grid Height="60" Background="White" VerticalAlignment="Top">
        <StackPanel Orientation="Vertical" >
            <StackPanel Orientation="Horizontal">
                <Label Content="MyCustomzizedUserControl" Foreground="White" VerticalAlignment="Center" FontSize="30" FontWeight="Bold" Padding="5,0" VerticalContentAlignment="Center"/>
            </StackPanel>

            <StackPanel Orientation="Horizontal">
                <Label Content="First step: Pick and Place" Foreground="White" VerticalAlignment="Center" FontSize="14" FontWeight="Bold" Padding="5,0" VerticalContentAlignment="Center"/>
            </StackPanel>
        </StackPanel>
    </Grid>

    <Grid x:Name="testgrid" Margin="0,60,0,0" Background="White">
        <Image Source="/System/Pic/Background.png" IsHitTestVisible="False"/>
        <Button x:Name="Add" MouseDown="ButtonAdd_MouseDown" HorizontalAlignment="Left" VerticalAlignment="Top" Height="50" Width="50"/>
    </Grid>
</Grid>

Итак, моя проблема is:

Я нажимаю на кнопку и появляется пользовательский элемент управления (это работает). Затем, когда я нажимаю на пользовательский элемент управления и ставлю его на позицию (это работает). Я нажимаю на кнопку, и появляется новый пользовательский элемент управления (это работает). А теперь сложная часть: когда я нажимаю на новый пользовательский элемент управления и когда я двигаю мышь, новый пользовательский элемент управления исчезает, а старый начинает двигаться. Что-то не так с моей сеткой, но я не понимаю этого. Может быть, некоторые профи могут помочь этой ладье ie.

Спасибо

...