根据我的阅读,在 Windows RT 中似乎没有实现TextBlock
s 或HyperlinkButton
s 等下划线的功能,这看起来很可笑,但无论如何,有没有人有一种优雅的方法来解决这个问题,特别是创建一个链接运行Click
事件或绑定命令?
如您所见,开箱即用的支持似乎不存在:http ://social.msdn.microsoft.com/Forums/en-CA/winappswithcsharp/thread/cba0c363-60da-4e
根据我的阅读,在 Windows RT 中似乎没有实现TextBlock
s 或HyperlinkButton
s 等下划线的功能,这看起来很可笑,但无论如何,有没有人有一种优雅的方法来解决这个问题,特别是创建一个链接运行Click
事件或绑定命令?
如您所见,开箱即用的支持似乎不存在:http ://social.msdn.microsoft.com/Forums/en-CA/winappswithcsharp/thread/cba0c363-60da-4e
这就是我之前解决这个问题的方法。
<HyperlinkButton x:Name="ExamplesLink" Click="ExamplesLink_Click"
Extensions:FrameworkElementExtensions.SystemCursor="Hand">
<TextBlock>
<Underline>
<Run Text="Examples"/>
</Underline>
</TextBlock>
</HyperlinkButton>
如果您有WinRT XAML 工具包,您也可以使用上述扩展名设置光标。
如果您需要(如我的情况)模板化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 问题!
您可以使用带有嵌入式 HyperlinkButtons 的 RichTextBlock。如果您查看RichTextBlockExtensions - 您可以使用它来绑定 html 文本片段(带有锚标记),以使用链接文本设置自动填充 RichTextBlock。
上述超链接按钮的问题,AFAIK 是运行文本不可绑定,因此您最终不得不为每个超链接按钮重复该 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>