WPF: Crear un control Linkbutton
Windows Presentation Foundation nos aporta la funcionalidad base para desde ella poder crear controles con estructuras y comportamientos más complejos.
Nos encontramos en ocasiones con que controles que eran para nosotros muy comunes en WinForms ya no está disponibles en WPF, pero sin embargo el tiempo y la complejidad que requiere implementarlos es minúsculo.
Vease por ejemplo el control LinkButton, que no está disponible en WPF y una posible implementación de este basado en un post de Irena Kennedv (Microsoft Consultant Services):
Dentro de nuestra ventana crearíamos un nuevo estilo dentro de los recursos del Grid (o de la ventana, aplicación...) y se lo aplicaríamos a un control Button de WPF mediante el atributo Style="{StaticResource LinkButtonStyle}".
El estilo que estamos aplicando modifica la plantilla del control y le aporta el comportamiento deseado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<Window x:Class="linkdemo.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="linkdemo" Height="300" Width="300" > <Grid> <Grid.Resources> <Style x:Key="LinkButtonStyle" TargetType="{x:Type Button}"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <TextBlock x:Name="tb" Background="{x:Null}" Cursor="Hand" TextDecorations="Underline" TextWrapping="Wrap" > <ContentPresenter VerticalAlignment="Center" RecognizesAccessKey="true"/> </TextBlock> <ControlTemplate.Triggers> <Trigger Property="IsPressed" Value="true" > <Setter Property="Cursor" Value="Hand" /> <Setter TargetName="tb" Property="BitmapEffect"> <Setter.Value> <DropShadowBitmapEffect ShadowDepth="1" Direction="330" Color="Black" Opacity="0.5" Softness="0.25" /> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Grid.Resources>
<Button x:Name="LinkButton1" Click="LinkButton1_Click" Style="{StaticResource LinkButtonStyle}" Foreground="Blue" Height ="18" Width="120px" > Escribe el texto aquí... </Button>
</Grid> </Window> |
Y además creamos nuestro manejador del evento Click mediante un delegado en nuestro código lateral para darle funcionalidad:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
namespace linkdemo { /// <summary> /// Interaction logic for Window1.xaml /// </summary>
public partial class Window1 : System.Windows.Window {
public Window1() { InitializeComponent(); }
void LinkButton1_Click(object sender, RoutedEventArgs e) { //Escribe tu código aquí... }
} } |