单击c#Windows 8获取对象

时间:2013-01-30 10:44:23

标签: c# object windows-8 microsoft-metro

抱歉,我是C#的新手,我到处寻找,甚至找不到它看起来也很容易。 我想通过点击它来获取对象,但我不知道该怎么做。

xaml中的一个简单按钮:

<TextBlock 
         Text="{Binding ProjectName}"
         VerticalAlignment="Center" Tapped="On_Tapped_Project"/>

我使用一个简单的功能:

    private void On_Tapped_Project(object sender, TappedRoutedEventArgs e)
    {
        this.Frame.Navigate(typeof(NoteFolders), MyProjects[3]);
    }

但我想拥有像MyProjects[x] x=(click Project)这样的具体项目。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

试试这个

var element = (sender as FrameworkElement);
  if (element != null)
  {
    var project = element.DataContext as Project;
    if (project != null)
    {
      //Implementation
    }
  }

答案 1 :(得分:0)

您需要将事件OriginalSource转换为您的类型(例如Project):

this.Frame.Navigate(typeof(NoteFolders), (Project) e.OriginalSource);

答案 2 :(得分:0)

您可以将项目ID存储在控件的标记属性中

<TextBlock 
    Text="{Binding ProjectName}" Tag="{Binding ProjectID}"
    VerticalAlignment="Center" Tapped="On_Tapped_Project"/>

您可以通过访问标记属性来恢复它

private void On_Tapped_Project(object sender, TappedRoutedEventArgs e)
{
    var projectID = ((TextBlock)sender).Tag as int;
    Frame.Navigate(typeof(NoteFolders), MyProjects[projectID]);
}

答案 3 :(得分:0)

private void On_Tapped_Project(object sender, TappedRoutedEventArgs e)
{
    var projectID = ((TextBlock)sender).Tag as int;
    Frame.Navigate(typeof(NoteFolders), MyProjects[projectID]);
}

是一种方法,但建议以这种方式做到这一点:

private void On_Tapped_Project(object sender, TappedRoutedEventArgs e)
{
    var projectID = (sender as TextBlock).Tag as int;
    Frame.Navigate(typeof(NoteFolders), MyProjects[projectID]);
}

&#34;发送者为ElementType&#34;是投射发送者的正确方法,其他方法可能会导致轻微问题,总是做最好的代码,不要错过为什么一次出错。