WPF Hyperlink Child - PullRequest
       11

WPF Hyperlink Child

0 голосов
/ 22 мая 2009

У меня есть WPF Hyperlink, на который я могу нажать и получить его свойство NavigateUri. Однако я хочу иметь возможность связать некоторую дополнительную информацию с Hyperlink, чтобы я мог обработать ее в своем обработчике событий. Вот как это выглядит сейчас:

<TextBlock Grid.Row="0">
    <Hyperlink ToolTip="{Binding Path=Contact.ToolTipPersonalEmail}" 
           Name="ContactHyperlink" Foreground="#FF333333" 
           RequestNavigate="HandleContactEmailClicked" 
           NavigateUri="{Binding Path=Contact.Email}"
           >
        <TextBlock Text="{Binding Path=Contact.Fullname}" Width="Auto"
            HorizontalAlignment="Stretch"
            TextTrimming="CharacterEllipsis"/>
        <TextBlock Text="{Binding Path=Data1}" Name="data1"  Visibility="Collapsed" />
        <TextBlock Text="{Binding Path=Data2}" Name="data2"  Visibility="Collapsed" />  
    </Hyperlink>

</TextBlock>

По сути, в моем обработчике событий я хочу иметь возможность доступа к данным внутри двух текстовых блоков, которые имеют видимость = "Свернутый" (данные1 и данные2). Я сравниваю это с «скрытыми» данными в форме HTML.

Я пытался связываться со свойством "Inlines" Hyperlink, но оно не работает, и поскольку это внутри DataTemplate, я не могу получить доступ к данным1 и данным2 по имени в моем коде.

Есть идеи?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

создание текстовых блоков для хранения этих данных несколько ... излишне. Я бы выбрал один из этих двух вариантов:

  1. использовать привязку данных, чтобы разместить объект в гиперссылку, а затем вернуть его, все, что вам нужно сделать, это получить доступ к DataContext из гиперссылка, и она предоставит вам класс, который содержит data1 и данные2
  2. прикрепить объект, который заполняет данные1 и данные2 в Атрибут TAG гиперссылки
2 голосов
/ 22 мая 2009

В вашем обработчике событий вы можете сделать что-то вроде этого:

ContentPresenter presenter = (ContentPresenter)sender.TemplatedParent;
DataTemplate template = presenter.ContentTemplate;
TextBlock textBlock = (TextBlock)template.FindName("data1", presenter);

Вероятно, не самый красивый способ, но он работает для меня.

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