12

TextBlock私が読んだことによると、Windows RT でs やs などに下線を引く機能はないHyperlinkButtonように見えますが、これはばかげているように見えますが、とにかく、これに取り組むエレガントなアプローチ、特にリンクを作成する方法を誰かが持っていますかClickイベントまたはバインド コマンドを実行しますか?

ご覧のとおり、すぐに使えるサポートは存在しないようです: http://social.msdn.microsoft.com/Forums/en-CA/winappswithcsharp/thread/cba0c363-60da-4e

4

4 に答える 4

18

これは、私が以前にこの問題を解決した方法です。

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

WinRT XAML ツールキットをお持ちの場合は、上記のような拡張機能を使用してカーソルを設定することもできます。

于 2012-11-20T01:15:09.933 に答える
9

(私の場合のように) をテンプレート化し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 の問題をバインディングで解決することもできます!

于 2013-10-18T09:51:16.107 に答える
1

ハイパーリンク ボタンが埋め込まれた RichTextBlock を使用できます。RichTextBlockExtensionsを見ると、これを使用して HTML テキスト フラグメントを (アンカー タグで) バインドし、リンクされたテキスト設定で RichTextBlock を自動的に設定できます。

于 2012-11-19T07:07:31.760 に答える
0

上記のハイパーリンクボタンの問題は、私の知る限り、実行テキストがバインドできないため、ハイパーリンクボタンごとにそのテキストブロック/下線/実行パターンを繰り返す必要があることです。それをスタイルにする方がはるかに良いでしょう。

例えばこれをやってみるとうまくいかず 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>
于 2013-09-04T05:58:46.527 に答える