wpf中的链接按钮
如果你不希望任何普通按钮样式,只是想要的东西,看起来像你可以用这个
<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>
这里开始的超链接是相同的风格:
<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>
,你可以使用它像这样:
<Button Style="{StaticResource LinkButton}" Content="Clicky" />
请注意,这里有一个错字 - LinkButon – GarethD 2012-02-03 12:17:51
这个答案产生一个按钮,在下划线和文本之间有一个空格。 @Christians答案可以解决这个问题。 – 2012-02-22 04:52:57
为什么你不想使用超链接?
<Button>
<Hyperlink>
</Button>
因为,每当我尝试在Visual树中获得父项,它会抛出一个异常,说超链接不是可视化的或Visual3d – 2009-04-23 05:55:48
我想要使用它。我得到它的工作,但我似乎无法摆脱按钮边缘的阴影。你是怎样做的? – 2010-01-18 22:01:07
这里的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>
<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>
MichaC的和安德森的版本放在下划线稍有不当,这里是一个更新版本,将只需要加一个下划线任何TextBlock
在ContentPresenter
之内。
最简单的方法(我这样做是在我的应用程序):
<TextBlock Name="..."
Text="..."
Cursor="Hand"
Foreground="Blue"
TextDecorations="Underline"
MouseLeftButtonUp=..."
/>
你有TextDecoration,例如完全控制更改笔样式或偏移量。 请查看此链接了解更多信息:http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.underline.aspx
使用Hyperlink
的另一个解决方案是放入TextBlock
的内部。
<TextBlock>
<Hyperlink Click="...">
<TextBlock Text="Link text" />
</Hyperlink>
</TextBlock>
如果有人关心,这里所有答案的问题是答案中的链接实际上并不像链接那样。他们不知道访问过的URL历史记录,并且颜色不是系统URL的颜色。但是,如果你没有这些要求,他们没关系。 – Will 2010-10-20 18:31:03
我想弄清楚如何使用正确的Windows颜色。 http://stackoverflow.com/questions/5094447 – 2011-02-23 22:42:39