wpf中的链接按钮

Pra*_*dda 89 wpf wpf-controls

如何使Button看起来像LinkBut​​ton,我不想使用超链接...... !!

有什么建议

Mic*_*haC 143

如果您不想要任何正常的Button样式,只想要看起来像超链接的东西,您可以从这开始

<Button Margin="5" Content="Test" Cursor="Hand">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <TextBlock TextDecorations="Underline">
                <ContentPresenter />
            </TextBlock>
        </ControlTemplate>
    </Button.Template>
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Blue" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
Run Code Online (Sandbox Code Playgroud)

这与风格相同:

<Style
    x:Key="LinkButton"
    TargetType="Button">
    <Setter
        Property="Template">
        <Setter.Value>
            <ControlTemplate
                TargetType="Button">
                <TextBlock
                    TextDecorations="Underline">
                <ContentPresenter /></TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter
        Property="Foreground"
        Value="Blue" />
    <Style.Triggers>
        <Trigger
            Property="IsMouseOver"
            Value="true">
            <Setter
                Property="Foreground"
                Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

<Button Style="{StaticResource LinkButton}" Content="Clicky" />
Run Code Online (Sandbox Code Playgroud)

  • 这个答案产生一个按钮,在下划线和文本之间有一个空格.@Christians的回答解决了这个问题. (2认同)

Chr*_*ian 33

<Style x:Key="LinkButton" 
       TargetType="Button"
       BasedOn="{StaticResource ResourceKey={x:Type Button}}"
       >

    <Setter Property="Width" Value="Auto"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <ContentPresenter Content="{TemplateBinding Content}" 
                                  ContentTemplate="{TemplateBinding  ContentTemplate}"
                                  VerticalAlignment="Center"
                                  >
                    <ContentPresenter.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="TextDecorations" Value="Underline" />
                        </Style>
                    </ContentPresenter.Resources>
                </ContentPresenter>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

MichaC和Anderson的版本下划线略显错误,这是一个更新版本,只会TextBlock在内部的任何内容中添加下划线ContentPresenter.


And*_*mes 30

这是MichaC的建议Style,你可以在任何按钮上重复使用:

<Style x:Key="LinkButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <TextBlock TextDecorations="Underline">
                    <ContentPresenter />
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个社区维基,考虑到99%的答案是从MichaC偷来的:) (8认同)

小智 11

最简单的方法(我在我的应用程序中执行此操作):

<TextBlock Name="..."
   Text="..."
   Cursor="Hand"
   Foreground="Blue"
   TextDecorations="Underline"
   MouseLeftButtonUp=..."
/>
Run Code Online (Sandbox Code Playgroud)

您可以完全控制TextDecoration,例如更改笔样式或偏移.看看这个链接,了解更多信息:http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.underline.aspx

  • 糟糕的做法,按照建议设置链接按钮的样式要好得多......如果你有50个LinkBut​​tons怎么办?此外,如果您需要添加悬停动作或可能是不同的装饰呢? (4认同)
  • 我不同意托默尔。“坏习惯”意味着永远不需要这种更简单的方法。我现在有一个案例,这是一个完美的解决方案,即在后台代码中创建按钮。谢谢Siavash。 (2认同)

xme*_*eko 8

使用的另一个解决方案Hyperlink是放入内部TextBlock.

<TextBlock>
    <Hyperlink Click="...">
        <TextBlock Text="Link text" />
    </Hyperlink>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)