我在这里得到了另一个帖子的一些帮助,我还没完全理解。
它是一个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
答案 0 :(得分:0)
有一个bool canTapBrowser = false; 改变这个
ComplexTextPresenterElement.OnHyperlinkCommand = new RelayCommand<object>(Execute);
要
ComplexTextPresenterElement.OnHyperlinkCommand = new RelayCommand<object>(Execute,()=> {return canTapBrowser});
在webbrower导航完成事件中执行以下操作:
canTapBrowser = true;
OnHyperlinkCommand.RefreshCommand();