Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF图像内边框未完全绘制_C#_Wpf_Xaml - Fatal编程技术网

C# WPF图像内边框未完全绘制

C# WPF图像内边框未完全绘制,c#,wpf,xaml,C#,Wpf,Xaml,我有一个边框内的图像: XAML: C#: 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.Windows; 使用System.Windows.Controls; 使用System.Windows.Data; 使用System.Windows.Documents; 使用System.Windows.Input; 使用System.Windows.Media; 使用System.Windows.Media.

我有一个边框内的图像:

XAML:


C#:

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
名称空间测试程序
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
私人点启动;
私人点源;
公共主窗口()
{
初始化组件();
TransformGroup=新建TransformGroup();
TranslateTransform tt=新的TranslateTransform();
组。儿童。添加(tt);
testImage.RenderTransform=组;
}
私有void testImage_MouseLeftButtonDown(对象发送器,MouseButtonEventArgs e)
{
testImage.CaptureMouse();
TranslateTransform tt=(TranslateTransform)((TransformGroup)testImage.RenderTransform).Children.First(tr=>tr是TranslateTransform);
开始=e.GetPosition(testBorder);
原点=新点(tt.X,tt.Y);
}
私有void testImage_MouseLeftButtonUp(对象发送器,MouseButtonEventArgs e)
{
testImage.ReleaseMouseCapture();
}
私有void testImage_MouseMove(对象发送方,MouseEventArgs e)
{
if(testImage.ismouseCapture)
{
TranslateTransform tt=(TranslateTransform)((TransformGroup)testImage.RenderTransform).Children.First(tr=>tr是TranslateTransform);
向量v=开始-e.GetPosition(testBorder);
tt.X=原点X-v.X;
tt.Y=原点Y-v.Y;
}
}
}
}
我已经添加了点击和拖动平移功能,但是图像的显示大小受到周围边框的限制,在平移图像时只留下图像的左上角可见。即使删除
cliptobunds=“True”


ActualHeight
ActualWidth
具有与图像的自然高度和宽度相对应的值,因此为什么要剪裁图像?如何使整个图像可见?

若您确实希望边框覆盖在图像顶部,请将它们都放在或中



WPF中的UI元素被约束到它们的父元素分配给它们的空间。
边框
放置在什么样的布局容器中?
边框
位于
DockPanel
内,或者设置图像的宽度/高度。尝试将边框和图像放置在画布中,为我们提供包含外部元素的完整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>
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;
        }
    }
}
}
 <Canvas>
   <Image/>
   <Borde/>
</Canvas>