学用Windows Phone 8中Hyperlink和Command

偶然得知,Windows 8.1中把Hyperlink加到了XAML中去了,这使我想到Windows Phone中也早已把相同的元素加进去,但是罕有文档说明。

接下来,我将演示一下,如何在Windows Phone 8中通过Hyperlink来实现导航和激活事件。

首先,我们需要在Visual Studio中新建一个Windows Phone的工程,并加入以下XAML:

    1: <TextBlock x:Name="tb1"></TextBlock>
    2: <RichTextBox>
    3:     <Paragraph>
    4:          <Hyperlink>First Link</Hyperlink>
    5:          Some Text
    6:          <Hyperlink>Second Link</Hyperlink>
    7:      </Paragraph>
    8:  </RichTextBox>

现在,按下F5启动调试,这里我们能看到界面中有两个超链接存在。下面,我们在一个链接中加URL,在另外一个链接中添加一个事件。

    1: <TextBlock x:Name="tb1"></TextBlock>
    2: <RichTextBox>
    3:     <Paragraph>
    4:         <Hyperlink NavigateUri="/Page1.xaml">First Link</Hyperlink>
    5:         Some Text
    6:         <Hyperlink Click="Hyperlink_Click">Second Link</Hyperlink>
    7:     </Paragraph>
    8: </RichTextBox>

最后,我们演示一下Hyperlink.Command。这个Command是一个激活动作,而不是一个绑定在按钮上的事件。在这里,我们需要给它绑定一个动作:

    1: <TextBlock x:Name="tb1"></TextBlock>
    2: <RichTextBox>
    3:     <Paragraph>
    4:         <Hyperlink CommandParameter="First Link" Command="{Binding HyperLinkTapped}">First Link</Hyperlink>
    5:         Some Text
    6:         <Hyperlink CommandParameter="Second Link" Command="{Binding HyperLinkTapped}">Second Link</Hyperlink>
    7:     </Paragraph>
    8: </RichTextBox>

在Model模型中去定义一个动作是很灵活的一件事情,并且可以在不同的模型实例中动态的去运行一个动作。不过,最重要的一步,还是需要去完成对ICommand的继承。下面是一段示例代码:

    1: public class MyCommand : ICommand
    2: {
    3:     private Action<object> _execute;
    4:  
    5:     public MyCommand(Action<object> action)
    6:     {
    7:         _execute = action;
    8:     }
    9:  
   10:      public bool CanExecute(object parameter)
   11:      {
   12:          return true;
   13:      }
   14:   
   15:      public event EventHandler CanExecuteChanged;
   16:   
   17:      public void Execute(object parameter)
   18:      {
   19:          _execute(parameter);
   20:      }
   21:  }

如果我们需要在后台代码中去绑定Command的话,我们还需要MyCommand属性。并且还需要去定义MyCommand动作:

    1: public MyCommand HyperLinkTapped { get; set; }
    2:  
    3: // Constructor
    4: public MainPage()
    5: {
    6:     InitializeComponent();
    7:  
    8:     HyperLinkTapped = new MyCommand(Executed);
    9:  
   10:      Title = "abe";
   11:      
   12:      // Sample code to localize the ApplicationBar
   13:      //BuildLocalizedApplicationBar();
   14:  }
   15:   
   16:  private void Executed(object parameter)
   17:  {
   18:      tb1.Text = parameter.ToString();
   19:  }

到这里我们已经演示了在Windows Phone中最基本的Hyperlink的使用。接下来,我这里将会展示更多的关于MVVM的使用细节。

English Version:https://blogs.msdn.com/b/lighthouse/archive/2013/09/06/beginning-with-hyperlink-and-command-in-windows-phone.aspx