我试图在没有运气的情况下查看WPF屏幕上鼠标点击的坐标。我有一个基本的网格布局,带有一个显示这些坐标的Textblock。我之前已经将xaml中的值绑定到代码隐藏,但我不确定这个方向是否可行。我的xaml如下
<Window x:Class="MouseUpExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Name="MyWindow">
<Grid>
<TextBlock Text="{Binding Path=GetMouseCoordinates}"/>
</Grid>
</Window>
我的代码隐藏如下
using System.Windows;
using System.Windows.Input;
using System.Windows.Shapes;
namespace MouseUpExample
{
public partial class MainWindow : Window
{
Point currentPoint = new Point();
public MainWindow()
{
InitializeComponent();
}
private string GetMouseCoordinates(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ButtonState == MouseButtonState.Pressed)
{
currentPoint = e.GetPosition(this);
return currentPoint.ToString();
}
return "error";
}
}
任何帮助将不胜感激,谢谢。
答案 0 :(得分:3)
你在这里遇到了很多问题。
问题#1是你无法绑定到方法。它必须是一个属性,最好是DependencyProperty
或参与INotifyPropertyChanged
接口的属性。
问题#2默认情况下绑定适用于DataContext,但您没有明确或隐式地设置DataContext
的{{1}}。
问题#3是这个没有意义。 TextBlock
是某事件的事件处理程序吗?您可能希望拆分事件处理程序和属性。
我建议你go read up on DataBinding in WPF然后给它另一个镜头。
答案 1 :(得分:0)
为了能够绑定您,必须将DataContext设置为实现INotifyPropertyChanged并绑定到其属性的类。由于您没有定义,我可以直接在视图中设置该文本。
<Window x:Class="MouseUpExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Name="MyWindow" MouseDown="MainWindow_OnMouseDown">
<Grid>
<TextBlock Name="MyTextBlock"/>
</Grid>
</Window>
在后面的代码中:
private void MainWindow_OnMouseDown(object sender, MouseButtonEventArgs e)
{
MyTextBlock.Text = e.GetPosition(this).ToString();
}