从代码隐藏到Grid的WPF绑定

时间:2014-07-15 15:27:01

标签: c# wpf

我试图在没有运气的情况下查看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";
    }
}

任何帮助将不胜感激,谢谢。

2 个答案:

答案 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();
}