Как сделать так, чтобы кнопка выглядела как LinkButton, и я не хочу использовать гиперссылку ... !!
Какие-либо предложения
wpf
wpf-controls
Прашант Чолачагудда
источник
источник
Ответы:
Если вам не нужен какой-либо обычный стиль кнопок и вы просто хотите что-то похожее на гиперссылку, вы можете начать с этого
<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" />
источник
<Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="Gray" /> </Trigger>
для обработки состояния IsEnabled<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
.источник
Вот предложение 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>
источник
Самый простой способ (делаю это в своем приложении):
<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>
источник
Почему вы не хотите использовать гиперссылку?
<Button> <Hyperlink> </Button>
источник