У меня есть небольшая помощь от другой темы, которую я не полностью понял.C# Отсутствует TapHandler в RelayCommand
Это 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));
} [...]
Перед открывает веб-браузер я должен остановить TapEvent который вызывается из UI элемента вокруг этого UserControl.
Надеюсь, этого достаточно. Дайте мне знать иначе.
Cheers,
Ulpin
Thx за ответ, но я не получаю это. Почему этот Bool не сможет перейти на следующую страницу? Проблема в том, что у всей поверхности UserControl есть TappEvent, который ведет после нажатия на следующую страницу моего приложения. Теперь, с новыми ссылками в этом пользовательском элементе управления, я не хочу, чтобы этот TappEvent выполнялся, если вы нажмете на новые ссылки. Поскольку я не могу установить этот TappEvent в 'e.Handled = true', приложение переходит на следующую страницу задолго до завершения навигации веб-браузера. Сообщите мне, если вам нужен еще какой-либо код или дополнительная информация ... – Ulpin
Немного подробное объяснение об использовании usecase/сценария поможет. Я смущен тем, что именно вы хотите, чтобы команда выполняла. Это для веб-просмотра для навигации или обработки событий. –
Хорошо. Итак, что я сделал до сих пор: это приложение Twitter. Если вы щелкните/коснитесь окружающего пробела твита, приложение перейдет на новую страницу, отображающую этот твит. Это то, что я имел в виду с UserControl и TappEvent. Следующее, что я сделал, это реализовать новый UserControl, который представляет текстовое поле с содержимым twitter. Это было проблематично, потому что нет текстового поля по умолчанию с гиперссылками и т. Д. В приведенном выше примере кода я только разместил часть с гиперссылкой, но, как вы можете себе представить, есть Hashtags и @ -TwitterHandles, которые должны быть связаны. – Ulpin