Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Sorot dan Zum Imej dengan Tindanan dalam WPF menggunakan ViewBox, ImageBrush dan ScrollViewer?

Bagaimana untuk Sorot dan Zum Imej dengan Tindanan dalam WPF menggunakan ViewBox, ImageBrush dan ScrollViewer?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 13:22:10175semak imbas

How to Pan and Zoom Images with Overlays in WPF using ViewBox, ImageBrush, and ScrollViewer?

Menyorot imej dan mengezum masuk WPF

WPF menyediakan cara mudah untuk menggabungkan ViewBox, ImageBrush dan ScrollViewer untuk mencipta pemapar imej yang menyokong fungsi pan, zum dan tindanan imej. Begini cara melakukannya:

1 Gunakan ViewBox untuk menyorot dan zum:

ViewBox Bekas membolehkan anda menskala dan meletakkan elemen kanak-kanak di dalamnya. Letakkan imej di dalam ViewBox dan anda boleh menyorot dan mengezum imej dengan mudah dengan melaraskan sifat Stretch dan Offsetnya.

2. Gunakan ImageBrush untuk membuat tindanan:

ImageBrush membolehkan anda melukis imej ke kawasan tertentu. Anda boleh membuat tindanan dengan mencipta ImageBrush dan menggunakannya sebagai pengisi untuk bentuk atau kawalan yang diletakkan di atas imej utama.

3. Gunakan ScrollViewer untuk memaparkan imej lengkap:

Jika saiz imej melebihi saiz pemapar, anda boleh menggunakan ScrollViewer sebagai induk kepada ViewBox utama. Ini membolehkan anda menatal keseluruhan imej asal.

4. Pelaksanaan sorot dan zum:

Contoh berikut menunjukkan cara menyorot dan mengezum menggunakan ViewBox, ImageBrush dan ScrollViewer:

MainWindow.xaml:

<code class="language-xml"><Window ...>
    <ScrollViewer>
        <Viewbox x:Name="PannableViewBox">
            <Image Source="myImage.jpg"/>
            <ImageBrush Opacity="0.5" x:Name="OverlayImageBrush"/>
        </Viewbox>
    </ScrollViewer>
</Window></code>

MainWindow.xaml.cs:

<code class="language-csharp">public partial class MainWindow : Window
{
    private Point _start;
    private ScaleTransform _scaleTransform;
    private TranslateTransform _translateTransform;

    public MainWindow()
    {
        InitializeComponent();

        _scaleTransform = new ScaleTransform();
        _translateTransform = new TranslateTransform();

        PannableViewBox.RenderTransform = new TransformGroup()
        {
            Children = { _scaleTransform, _translateTransform }
        };
    }

    private void PannableViewBox_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            _scaleTransform.ScaleX += e.Delta > 0 ? 0.1 : -0.1;
            _scaleTransform.ScaleY += e.Delta > 0 ? 0.1 : -0.1;
        }
    }

    private void PannableViewBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        _start = e.GetPosition(PannableViewBox);
        PannableViewBox.CaptureMouse();
    }

    private void PannableViewBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        PannableViewBox.ReleaseMouseCapture();
    }

    private void PannableViewBox_MouseMove(object sender, MouseEventArgs e)
    {
        if (PannableViewBox.IsMouseCaptured)
        {
            var point = e.GetPosition(PannableViewBox);
            _translateTransform.X -= point.X - _start.X;
            _translateTransform.Y -= point.Y - _start.Y;
            _start = point;
        }
    }
}</code>

Kod ini menunjukkan cara menggunakan ViewBox untuk mencipta kawasan boleh pann, cara mengezum sebagai tindak balas kepada peristiwa roda tetikus dan cara mengendalikan acara tetikus untuk menyorot. Anda boleh menyesuaikan lagi penyelesaian ini untuk menambah tindanan dan ciri lain.

Atas ialah kandungan terperinci Bagaimana untuk Sorot dan Zum Imej dengan Tindanan dalam WPF menggunakan ViewBox, ImageBrush dan ScrollViewer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn