2016-04-15 5 views
2

私はここで別のスレッドの助けを借りています。C#RelayCommandのTapHandlerがありません

複数の種類のテキストを区別して1つのテキストボックスのように見せるのはUserControlです。一部のタイプ(ハイパーリンク)はクリック可能です。

私はこのコードをクリックしています。

public class RelayCommand<T> : ICommand 
{ 
    readonly Action<T> _execute; 
    readonly Func<T, bool> _canExecute; 

    public event EventHandler CanExecuteChanged; 

    public RelayCommand(Action<T> execute, Func<T, bool> canExecute = null) 
    { 
     _execute = execute; 
     _canExecute = canExecute; 
    } 

    public void RefreshCommand() 
    { 
     var cec = CanExecuteChanged; 
     if (cec != null) 
      cec(this, EventArgs.Empty); 
    } 

    public bool CanExecute(object parameter) 
    { 
     if (_canExecute == null) return true; 
     return _canExecute((T)parameter); 
    } 

    public void Execute(object parameter) 
    { 
     _execute((T)parameter); 
    } 
} 

問題は今、リンクをクリックした後でTap/Clickイベントを停止したいという問題です。通常、イベントがバブリングするのを防ぐために、私はこれを行うでしょうe.Handled = True。しかし、この場合、私はリンク上にTappEventを持っていません。

ユーザーコントロールの背後にあるコード - は、次のようになります。ウェブブラウザが開き

private void Init() 
    { 
     //ComplexTextPresenterElement.Input = "This is where the Content string has to be...."; 
     ComplexTextPresenterElement.OnHyperlinkCommand = new RelayCommand<object>(Execute); 
    } 

    private async void Execute(object o) 
    { 
     List<object> passingParameters = new List<object>(); 

     //put here the code that can open browser 
     if (o is HyperLinkPart) 
     { 
      var obj = (HyperLinkPart)o; 
      await Windows.System.Launcher.LaunchUriAsync(new Uri(obj.RealUrl, UriKind.Absolute)); 
     } [...] 

前に、私は、このユーザーコントロールの周囲のUI要素から呼び出されるTapEventを停止する必要があります。

これが十分な情報であることを希望します。そうでなければ私に教えてください。

乾杯、

Ulpin

答えて

0

は、偽のブールcanTapBrowser =を持っています。答えを

canTapBrowser = true; 
OnHyperlinkCommand.RefreshCommand(); 
+0

Thxを、しかし、私はこれが届かない:webbrowerナビゲーション完了した場合には 変更

ComplexTextPresenterElement.OnHyperlinkCommand = new RelayCommand<object>(Execute,()=> {return canTapBrowser}); 

するために、この

ComplexTextPresenterElement.OnHyperlinkCommand = new RelayCommand<object>(Execute); 

は、次の手順を実行します。なぜこのブールは次のページに行かないのですか?問題は、UserControlの完全なサーフェスに、アプリケーションの次のページにタップした後に導くTappEventがあることです。今、そのユーザーコントロールの新しいリンクでは、新しいリンクをクリックするとこのTappEventを実行したくありません。私はこのTappEventを 'e.Handled = true'に設定することができないので、Webブラウザのナビゲーションが完了するはずっと前に、次のページに移動します。 もっとコードや詳細情報が必要な場合は教えてください。 – Ulpin

+0

ユースケース/シナリオについて少し詳しく説明します。私は、コマンドがしたいことが何であるかについて混乱しています。 webviewがナビゲートしたり、イベント処理をタップしたりしていますか? –

+0

これまで私が何をしているのですか?それはTwitterアプリケーションです。ツイートの周囲の空白をクリック/タップすると、このツイートを表示する新しいページに移動します。これは、私がUserControlとTappEventの意味です。私がやった次のことは、twitterコンテンツのテキストボックスを表す新しいUserControlを実装することです。上記のコード例では、ハイパーリンクを使ってパーツを投稿しただけですが、リンクする必要があるハッシュタグと@ -TwitterHandlesがあると想像することができます。 – Ulpin

関連する問題