代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

如何在Silverlight中向超链接按钮添加下划线?

  •  9
  • Edward Tanguay  · 技术社区  · 15 年前

    似乎我可以用格式化文本块的方式来格式化超链接按钮:

    HyperlinkButton hyperlinkButton = new HyperlinkButton();
    hyperlinkButton.Content = "google";
    hyperlinkButton.NavigateUri = new Uri("http://www.google.com");
    hyperlinkButton.TargetName = "blank";
    hyperlinkButton.Foreground = XamlHelpers.GetColorFromHex("555");
    hyperlinkButton.TextDecoration = ... //error
    hyperlinkButton.FontWeight = FontWeights.Bold;
    

    然而,textDecoration并不像在textBlock中那样工作。鼠标上方有一个自动下划线,但也希望鼠标上方有一个下划线。

    如何在Silverlight中向超链接按钮添加下划线?

    2 回复  |  直到 13 年前
        1
  •  15
  •   Dan Auclair    15 年前

    如果您只需要一个静态下划线(没有mouseover效果),那么应该使用一个文本块作为超链接按钮的内容。由于超链接按钮是一个ContentControl,它可以采用任何其他控件类型作为内容(不仅仅是简单字符串)。

    下面是一些XAML,它将为您提供一个带下划线的文本块作为超链接按钮的内容:

        <HyperlinkButton NavigateUri="http://google.com">
            <TextBlock Text="Google" TextDecorations="Underline" />
        </HyperlinkButton>
    

    您应该能够创建文本块,并在代码后面设置带有c_的超链接按钮的内容属性(如果这就是您要做的)。

    正如大卫所说,编辑ControlTemplate当然可以根据您的喜好设计一个超链接按钮的样式,但是使用一个实际的带下划线的文本块作为内容可能更简单,如果您只需要这样做的话,XAML会少得多。

        2
  •  5
  •   David    15 年前

    编辑控件模板。我通过表情混合撕开了这个。

     <Style x:Key="HyperlinkButtonStyle1" TargetType="HyperlinkButton">
                <Setter Property="Foreground" Value="#FF73A9D8"/>
                <Setter Property="Padding" Value="2,0,2,0"/>
                <Setter Property="Cursor" Value="Hand"/>
                <Setter Property="HorizontalContentAlignment" Value="Left"/>
                <Setter Property="VerticalContentAlignment" Value="Top"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="HyperlinkButton">
                            <Grid Background="{TemplateBinding Background}" Cursor="{TemplateBinding Cursor}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualState x:Name="Normal"/>
                                        <VisualState x:Name="MouseOver">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="UnderlineTextBlock">
                                                    <DiscreteObjectKeyFrame KeyTime="0">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Visible</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Pressed">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="UnderlineTextBlock">
                                                    <DiscreteObjectKeyFrame KeyTime="0">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Visible</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Disabled">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOverlay">
                                                    <DiscreteObjectKeyFrame KeyTime="0">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Visible</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="FocusStates">
                                        <VisualState x:Name="Focused">
                                            <Storyboard>
                                                <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualElement"/>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Unfocused"/>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <TextBlock x:Name="UnderlineTextBlock" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}" TextDecorations="Underline" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>                       
                                <TextBlock x:Name="DisabledOverlay" Foreground="#FFAAAAAA" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Canvas.ZIndex="1"/>
                                <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Opacity="0" Stroke="#FF6DBDD1" StrokeThickness="1"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    

    更改此控件的可见性:

    <TextBlock x:Name="UnderlineTextBlock" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}" TextDecorations="Underline" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>