Как сделать ссылки в тексте кликабельными в моем приложении Twitter? - PullRequest
1 голос
/ 09 марта 2012

Я пытаюсь разработать базовое анонимное твиттер-приложение, проблема у меня в том, что я хотел бы иметь возможность щелкать по контенту, т.е. изображения и т. д., размещенные твитером. Я также хотел бы иметь возможность расширить изображение профиля, если это возможно.

1 Ответ

0 голосов
/ 09 марта 2012

Чтобы в вашем тексте были ссылки, вам нужно манипулировать полученными данными во время выполнения.Таким образом, вы больше не заполняете текстовый блок чистым текстом, но фактически превращаете ссылки в гиперссылки. Этот ответ обрабатывает это подробно:

private void OnMessageReceived(string message)
{
    var textBlock = new RichTextBox()
    {
        TextWrapping = TextWrapping.Wrap,
        IsReadOnly = true,
    };

    var paragraph = new Paragraph();

    var runs = new List<Inline>();

    foreach (var word in message.Split(' '))
    {
        Uri uri;

        if (Uri.TryCreate(word, UriKind.Absolute, out uri) ||
           (word.StartsWith("www.") && Uri.TryCreate("http://" + word, UriKind.Absolute, out uri)))
        {
            var link = new Hyperlink();
            link.Inlines.Add(new Run() { Text = word });
            link.Click += (sender, e) =>
            {
                var hyperLink = (sender as Hyperlink);
                new WebBrowserTask() { Uri = uri }.Show();
            };

            runs.Add(link);
        }
        else
        {
            runs.Add(new Run() { Text = word });
        }

        runs.Add(new Run() { Text = " "});
    }

    foreach (var run in runs)
        paragraph.Inlines.Add(run);

    textBlock.Blocks.Add(paragraph);

    MessagesListBox.Children.Add(textBlock);
    MessagesListBox.UpdateLayout();
}

Недостатком приведенного выше кода является потеря привязки данных.Вы можете попытаться изменить функцию таким образом, чтобы она изменяла существующие текстовые блоки вместо добавления новых.Сохраняйте свой контекст данных, только если позже вы будете использовать твиты в своем собственном приложении, а не просто создавать ссылки.

Требуется привыкание к динамическому манипулированию XAML.

Обновление: На самом деле я обнаружил, что вы можете связать Содержимое любого элемента, который поддерживает его, с UIElement.Например, вы можете изменить строку TextBox на бесполезный контейнер <StackPanel Content="{Binding MyRichText}"></StackPanel> и назначить textBlock из приведенного выше кода для свойства MyRichText вашего TwitterItem ...


.чтобы сделать изображение кликабельным, вам понадобится HyperlinkButton .Просто измените ваш шаблон:

<HyperlinkButton>
  singleObject
</HyperlinkButton>

Это означает, что вы можете просто окружить свой объект изображения.

Обратите внимание, что HyperlinkButton имеет свойство NavigateURI , поэтому вы просто привязываетечто к изображению URL (или на странице профиля автора, или ...).

<HyperlinkButton NavigateURI="{Binding ImageSource}">
    <Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/>
</HyperlinkButton>

Как-то так.Например, если вам нужен URL профиля, вместо этого вам нужно изменить NavigateURI="{Binding ImageSource} на NavigateURI="{Binding ProfileURL}", а затем добавить ProfileURL в ваш элемент TwitterItem и задать для него URL-адрес, где вы будете создавать новые элементы Twitter.

Итак, это более простое изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...