c#在RelayCommand中缺少TapHandler

时间:2016-04-15 11:41:03

标签: c# wpf windows-phone-8.1 winrt-xaml

我在这里得到了另一个帖子的一些帮助,我还没完全理解。

它是一个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);
    }
}

现在的问题是,我想在点击链接后停止点击/点击事件。通常为了防止事件冒泡,我会这样做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));
        } [...]

在webbrowser打开之前,我必须停止从这个UserControl周围的UI元素调用的TapEvent。

我希望这是足够的信息。别的我知道了。

干杯,

Ulpin

1 个答案:

答案 0 :(得分:0)

有一个bool canTapBrowser = false; 改变这个

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

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

在webbrower导航完成事件中执行以下操作:

canTapBrowser = true;
OnHyperlinkCommand.RefreshCommand();