边框内的WPF图像未完全绘制

时间:2014-06-05 16:00:12

标签: c# wpf xaml

我在边框内有一张图片:

XAML:

<Window x:Class="TestProgram.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Test" Height="350" Width="525">
<DockPanel>
    <Grid DockPanel.Dock="Top">
        <!---->
    </Grid>

    <ListBox DockPanel.Dock="Left"/>

    <Grid DockPanel.Dock="Top">
        <!---->
    </Grid>


    <Border x:Name="testBorder" ClipToBounds="True" Background="Gray">
        <Image x:Name="testImage" Source="test.png" Opacity="1" Stretch="None"
               MouseLeftButtonDown="testImage_MouseLeftButtonDown"
               MouseLeftButtonUp="testImage_MouseLeftButtonUp"
               MouseMove="testImage_MouseMove"
               />
    </Border>

</DockPanel>
</Window>

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TestProgram
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    private Point start;
    private Point origin;

    public MainWindow()
    {
        InitializeComponent();

        TransformGroup group = new TransformGroup();

        TranslateTransform tt = new TranslateTransform();
        group.Children.Add(tt);

        testImage.RenderTransform = group;
    }

    private void testImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        testImage.CaptureMouse();
        TranslateTransform tt = (TranslateTransform)((TransformGroup)testImage.RenderTransform).Children.First(tr => tr is TranslateTransform);
        start = e.GetPosition(testBorder);
        origin = new Point(tt.X, tt.Y);
    }

    private void testImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        testImage.ReleaseMouseCapture();
    }

    private void testImage_MouseMove(object sender, MouseEventArgs e)
    {
        if (testImage.IsMouseCaptured)
        {
            TranslateTransform tt = (TranslateTransform)((TransformGroup)testImage.RenderTransform).Children.First(tr => tr is TranslateTransform);
            Vector v = start - e.GetPosition(testBorder);
            tt.X = origin.X - v.X;
            tt.Y = origin.Y - v.Y;
        }
    }
}
}

我添加了点击&amp;拖动平移功能,但图像的显示尺寸受到周围边框的限制,在平移图像时只留下图像的左上角。即使我删除了ClipToBounds="True"

,情况也是如此

ActualHeightActualWidth的值与图片的自然高度和宽度相对应,那么为什么要剪切图像?我该怎么做才能看到完整的图像?

1 个答案:

答案 0 :(得分:1)

如果您确实希望边框覆盖在图片的顶部,请将它们放在&lt; Grid&gt;中。或&lt; Canvas&gt;

 <Canvas>
   <Image/>
   <Borde/>
</Canvas>