Подтвердить что ты не робот

Лучший способ достичь подчеркнутой гиперссылки в приложениях Windows Store?

Из того, что я прочитал, похоже, нет никакой функции для достижения подчеркивания для TextBlock или HyperlinkButton или тому подобного в Windows RT, который выглядит смехотворным, но в любом случае у кого-то есть элегантный подход к решению этой проблемы, в частности, для создания ссылки, в которой выполняется команда Click или команда привязки?

Как вы можете видеть, поддержка "из коробки" не существует: http://social.msdn.microsoft.com/Forums/en-CA/winappswithcsharp/thread/cba0c363-60da-4e

4b9b3361

Ответ 1

Вот как я решил эту проблему раньше.

<HyperlinkButton x:Name="ExamplesLink" Click="ExamplesLink_Click"
   Extensions:FrameworkElementExtensions.SystemCursor="Hand">
   <TextBlock>
      <Underline>
        <Run Text="Examples"/>
      </Underline>
   </TextBlock>
</HyperlinkButton>

Если у вас есть инструментарий WinRT XAML, вы можете также установить курсор с расширением, как указано выше.

Ответ 2

Если вам понадобится (как в моем случае) шаблон HyperlinkButton, сохраняя ваши привязки в вашем представлении, вы можете сделать это следующим образом:

<Style TargetType="HyperlinkButton"
    x:Key="StandardHyperlinkButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <TextBlock Style="{StaticResource BaseEntityDetailTextStyle}">
                    <Underline>
                        <Run Text="{Binding Path=Content, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
                    </Underline>
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

... и затем в вашем представлении XAML, например:

<HyperlinkButton Style="{StaticResource StandardHyperlinkButton}"
    Content="{Binding Path=myContent, Mode=OneWay}"
    Command="{StaticResource myCommand}"
    CommandParameter="{Binding Path=myContent, Mode=OneWay}" />

Таким образом вы также можете решить проблему @sacha с привязками!

Ответ 3

Вы можете использовать RichTextBlock со встроенными гиперссылками. Если вы посмотрите на RichTextBlockExtensions - вы можете использовать его для привязки html-фрагментов текста (с привязными тегами) для автоматического заполнения RichTextBlock связанным текстом установка.

Ответ 4

Проблема с вышеперечисленным гиперссылкой AFAIK заключается в том, что Run Text не является связываемым, поэтому вам нужно повторить шаблон TextBlock/Underline/Run для каждой кнопки гиперссылки. Гораздо лучше было бы сделать его стилем.

Например, если вы попробуете это, это не сработает и произойдет UnhandledException

<HyperlinkButton Width="Auto" Height="Auto" Margin="2" 
        Content="{Binding DoctorName}"
        Command="{Binding ElementName=scheduleView, 
            Path=DataContext.NavigateToAppointmentsDetailCommand}"
        CommandParameter="{Binding DoctorName}">
    <HyperlinkButton.Template>
        <ControlTemplate>
            <TextBlock>
                <Underline>
                <Run Text="{TemplateBinding Content}"/>
                </Underline>
            </TextBlock>
        </ControlTemplate>
    </HyperlinkButton.Template>

</HyperlinkButton>

Единственное, что я нашел, чтобы исправить это, когда текст гиперссылки также был связан, заключался в использовании поддельного прямоугольника подчеркивания и обычной кнопки. Затем я показываю подчеркивание (поддельный прямоугольник) в зависимости от того, находится ли указатель над кнопкой. Вот соответствующий код:

Не лучшее решение, но оно привязывается к контенту (текст ссылки) и его общее решение.

<Button Width="Auto" Height="Auto" Margin="2" 
        Style="{StaticResource HyperLinkButtonStyle}"
        Content="{Binding DoctorName}">
</Button>

                                                                                                                                                                                                                                         

                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames 
                    Storyboard.TargetProperty="(UIElement.Visibility)" 
                    Storyboard.TargetName="rect">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>

                                </Storyboard>

                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="FocusStates"/>
                    </VisualStateManager.VisualStateGroups>
                    <StackPanel Orientation="Vertical">
                        <TextBlock x:Name="txt" 
                Text="{TemplateBinding Content}" 
                HorizontalAlignment="Center" 
                                    FontFamily="Segoe UI" FontSize="18" FontWeight="Thin"/>
                        <Rectangle x:Name="rect" Fill="White" Height="2" Visibility="Collapsed"
                            VerticalAlignment="Top" HorizontalAlignment="Stretch"/>
                    </StackPanel>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>