Как сделать простую гиперссылку в XAML?

Просто вызов .Result; или .Wait() - это риск блокировок, о котором многие говорили в комментариях. Поскольку большинство из нас, как oneliners, вы можете использовать их для .Net 4.5<

Приобретение значения с помощью метода async:

var result = Task.Run(() => asyncGetValue()).Result;

Синхронно вызывать метод асинхронизации

Task.Run(() => asyncMethod()).Wait();

Никаких проблем с блокировкой не произойдет из-за использования Task.Run.

Источник:

https://stackoverflow.com/a/32429753/3850405

51
задан Edward Tanguay 10 February 2009 в 09:28
поделиться

4 ответа

Можно использовать Кнопку с шаблоном пользовательского элемента управления, код ниже является ограниченной кнопкой стиля гиперссылки (например, это только поддерживает текстовые гиперссылки), но возможно это укажет на Вас в правильном направлении.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="Link" TargetType="Button">
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="Cursor" Value="Hand"/>
    <Setter Property="Foreground" Value="Blue"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <TextBlock TextDecorations="Underline" 
                    Text="{TemplateBinding Content}"
                    Background="{TemplateBinding Background}"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Foreground" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</Page.Resources>
<Button Content="Click Me!" Style="{StaticResource Link}"/>
</Page>
37
ответ дан Nir 7 November 2019 в 19:41
поделиться

Вы не можете добавить гиперссылку в StackPanel - вы получите ошибка выполнения. (На самом деле, я немного удивлен, что это не ошибка времени компиляции.) Это потому, что гиперссылка не находится на стороне «элементов управления» WPF с

168
ответ дан 7 November 2019 в 09:41
поделиться

Вы можете обнаружить, что если вы привязываетесь к чему-либо, кроме простых текстовых значений, вам нужно будет использовать ContentPresenter , иначе ничего не появится, это может быть правдой, если вы привязываетесь к источнику данных XML. .

Триггер свойства для IsMouseOver подчеркивает текст.

Пример привязки к XML представлен ниже.

<Style x:Key="JobNumberStyleButton" TargetType="{x:Type Button}">
  <Setter Property="VerticalAlignment" Value="Top"/>
  <Setter Property="HorizontalAlignment" Value="Left"/>
  <Setter Property="Cursor" Value="Hand"/>
  <Setter Property="Background" Value="Transparent"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <TextBlock>
          <ContentPresenter
            Margin="0,0,0,0"
            ContentTemplate="{TemplateBinding ContentTemplate}"
            Content="{TemplateBinding Content}"
            ContentStringFormat="{TemplateBinding ContentStringFormat}"
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
            RecognizesAccessKey="False"
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
        </TextBlock>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
  <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <TextBlock Padding="0,0,0,0" Margin="0,0,0,0">
              <Underline>
                <ContentPresenter
                  Margin="0,0,0,0"
                  ContentTemplate="{TemplateBinding ContentTemplate}"
                  Content="{TemplateBinding Content}"
                  ContentStringFormat="{TemplateBinding ContentStringFormat}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                  RecognizesAccessKey="False"
                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
              </Underline>
            </TextBlock>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers>
</Style>
4
ответ дан 7 November 2019 в 09:41
поделиться

Обычно, значение Гиперссылки должно дать привязку, чтобы отправить пользователя другому Page или вообще говоря, к другому ресурсу, таким образом, это реализовано таким способом, и необходимо указать местоположение для того ресурса как это:

<HyperLink NavigateUri="http://www.site.com">
   Web Site
</HyperLink>

Однако я нашел это сообщение блога с пользовательским TextBlock, который используется в качестве HyperLink и поддерживает события щелчка.

1
ответ дан Stefano Driussi 7 November 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: