0

ここで私が望んでいる何かに問題があるのは、実際には簡単です。

画像を表示できるカスタム UserControl が WPF にあります。プログラムの実行中、ユーザーはこの UserControl を何度でもキャンバスに追加できます。実際には、画像を追加および移動できる単純な画像ビューアです。

これらの画像を右クリックして contextMenu を開き、後方に送るか前方に送るかを選択すると、クリックされたメニューの選択に応じて画像の z オーダーが変わります。

contextMenu を使用してユーザー コントロールを設定しているので、この userControl の z オーダーを変更するためのコードを知る必要があります...

どんな助けでも大歓迎です:)

namespace StoryboardTool
{
    /// <summary>
    /// Interaction logic for CustomImage.xaml
    /// </summary>
    public partial class CustomImage : UserControl
    {
        private Point mouseClick;
        private double canvasLeft;
        private double canvasTop;

        public CustomImage()
        {
            InitializeComponent();
            cusImageControl.SetValue(Canvas.LeftProperty, 0.0);
            cusImageControl.SetValue(Canvas.TopProperty, 0.0);
        }

        public void chooseImage()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "Choose Image to Add";

            if (ofd.ShowDialog() == true)
            {
                BitmapImage bImage = new BitmapImage();
                bImage.BeginInit();
                bImage.UriSource = new Uri(ofd.FileName);
                bImage.EndInit();

                image.Width = bImage.Width;
                image.Height = bImage.Height;
                image.Source = bImage;
                image.Stretch = Stretch.Fill;
            }
        }

        private void cusImageControl_LostMouseCapture(object sender, MouseEventArgs e)
        {
            ((CustomImage)sender).ReleaseMouseCapture();
        }

        private void cusImageControl_MouseUp(object sender, MouseButtonEventArgs e)
        {
            ((CustomImage)sender).ReleaseMouseCapture();
            cusImageControl.Cursor = Cursors.Arrow;
        }

        private void cusImageControl_MouseMove(object sender, MouseEventArgs e)
        {
            if ((((CustomImage)sender).IsMouseCaptured) && (cusImageControl.Cursor == Cursors.SizeAll))
            {

                Point mouseCurrent = e.GetPosition(null);
                double Left = mouseCurrent.X - mouseClick.X;
                double Top = mouseCurrent.Y - mouseClick.Y;
                mouseClick = e.GetPosition(null);
                ((CustomImage)sender).SetValue(Canvas.LeftProperty, canvasLeft + Left);
                ((CustomImage)sender).SetValue(Canvas.TopProperty, canvasTop + Top);
                canvasLeft = Canvas.GetLeft(((CustomImage)sender));
                canvasTop = Canvas.GetTop(((CustomImage)sender));

            }
            else if ((((CustomImage)sender).IsMouseCaptured) && (cusImageControl.Cursor == Cursors.SizeNWSE))
            {
                /*Point mouseCurrent = e.GetPosition(null);
                cusImageControl.Height = cusImageControl.canvasTop + mouseClick.Y;
                cusImageControl.Width = cusImageControl.canvasLeft + mouseClick.X;
                mouseClick = e.GetPosition(null);*/

            }
        }

        private void cusImageControl_MouseDown(object sender, MouseButtonEventArgs e)
        {
            mouseClick = e.GetPosition(null);
            canvasLeft = Canvas.GetLeft(((CustomImage)sender));
            canvasTop = Canvas.GetTop(((CustomImage)sender));
            ((CustomImage)sender).CaptureMouse();
        }

        private void ContextMenuBringForward_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Bring Forward");

        }

        private void ContextMenuSendBackward_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Send Backward");
        }

        private void ContextMenuMove_Click(object sender, RoutedEventArgs e)
        {
            cusImageControl.Cursor = Cursors.SizeAll;
        }   

        private void ContextMenuResize_Click(object sender, RoutedEventArgs e)
        {
            cusImageControl.Cursor = Cursors.SizeNWSE;
        }

    }
}
4

2 に答える 2

1

Panel 添付プロパティCanvas.SetZIndexを参照してください。すべての要素の z-Index を 0 に変更し、右クリックしたコントロールの z-Index を 1 に変更します。

void mouseUp(object sender, MouseButtonEventArgs e)
{
   foreach (var child in yourCanvas.Children) Canvas.SetZIndex(child, 0); 
   Canvas.SetZIndex((UIElement)sender, 1);
}
于 2013-07-18T10:01:21.727 に答える
0

次のコードは、selected が UserControl として定義され、mouseDown イベントで設定されている場合に機能します。

private void ContextMenuSendBackward_Click(object sender, RoutedEventArgs e)
        {
            Canvas parent = (Canvas)LogicalTreeHelper.GetParent(this);
            foreach (var child in parent.Children)
            {
                Canvas.SetZIndex((UIElement)child, 0);
            }
            Canvas.SetZIndex(selected, 1);
        }

voo の助けに感謝します。

于 2013-07-18T11:45:40.847 に答える