【发布时间】:2014-02-15 12:16:02
【问题描述】:
我有一个带有两个面板的简单 WPF 界面。在右侧,我有两个滑块,用于缩放和移动左侧面板上的简单形状。
当我将光标移到形状上时,我还有一个 MouseMove 事件。
当我使用滑块平移/缩放形状然后移动鼠标光标以获取鼠标位置时,我会得到正确的结果,这些结果在缩放/变换之前和之后是不同的。 (如下图所示)。
我想做的是如何在每次转换后获得区域的边界(天蓝色)。
<Window x:Class="GUI.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Zoom Slider" Height="300" Width="600">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"></ColumnDefinition>
<ColumnDefinition Width="300"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Background="Azure" x:Name="_window" MouseMove="_window_MouseMove">
<Canvas x:Name="_c" Width="100" Height="100"
Background="Black" RenderTransformOrigin="0.5,0.5">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="{Binding ElementName=_zoomSlider, Path=Value}"
ScaleY="{Binding ElementName=_zoomSlider, Path=Value}"/>
<TranslateTransform X="{Binding ElementName=_panSlider, Path=Value}"/>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
</Grid>
<StackPanel Background="Aquamarine" Grid.Column="1">
<Slider x:Name="_zoomSlider"
Maximum="2" Minimum="0.5" Value="1"
Width="200"/>
<Slider x:Name="_panSlider"
Maximum="100" Minimum="-100" Value="0"
Width="200"/>
<Label x:Name="_mousePosition">Mouse Position</Label>
<Label x:Name="_boundaries">Boundaries</Label>
</StackPanel>
</Grid>
</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.Shapes;
namespace GUI
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void _window_MouseMove(object sender, MouseEventArgs e)
{
_mousePosition.Content = (Math.Round(Mouse.GetPosition(_c).X)).ToString()
+ ", "
+ (Math.Round(Mouse.GetPosition(_c).Y)).ToString();
}
}
}
【问题讨论】: