Bordes en Hyperlinkbutton
Al empezar a migrar las aplicaciones de la Beta 2 a la versión final, me encontré algo realmente curioso. Al hacer click en un HyperlinkButton, aparecía el link bordeado. Al investigar un poco, me doy cuenta de que la nueva versión agrega a los controles un borde al hacer foco en el mismo, lo que para algunos controles, como los Textbox es bastante útil para saber donde esta parado el cursor,pero para los links no es algo que me parezca muy útil.
Ahora, al momento de intentar sacarlo, me doy cuenta que no hay una propiedad que me permita sacarlo, ya sea desde el Blend o desde el code-behind. La pregunta es como hacemos para sacarle el borde. La respuesta es utilizando un template para el control.
Entonces lo primero que vamos a hacer es crear un template en el App.xaml
<Application.Resources>
<Style TargetType="HyperlinkButton"
x:Key="HyperlinkButtonNoBorder">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HyperlinkButton">
<Grid x:Name="RootElement"
Cursor="{TemplateBinding Cursor}">
<Rectangle x:Name="FocusVisualElement"
StrokeDashCap="Round"
StrokeDashArray=".2 5"
Visibility="Collapsed"
IsHitTestVisible="false">
</Rectangle>
<ContentPresenter x:Name="Normal"
Content="{TemplateBinding Content}">
</ContentPresenter>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
De esta manera vemos como definimos para un HyperlinkButton (target) un estilo llamado HyperlinkButtonNoBorder (key), donde definimos que el Rectangle que se genera al hacer foco, no este visible. De tal manera el control que utilice este estilo va a funcionar como en la versión anterior.
El siguiente paso, es asignarle a el HyperlinkButton el estilo que acabamos de crear.
<HyperlinkButton x:Name="linkButton"
FontFamily="Arial"
FontSize="12"
Foreground="#FFFFFFFF"
Content="Prueba de Link"
Click="linkButton_Click"
Cursor="Hand"
Style='{StaticResource HyperlinkButtonNoBorder}'
/>
Como vemos, le asignamos en Style, el template que creamos en el paso anterior.
De esta manera podemos generar otros templates para los controles en los que no necesitamos que aparezcan bordeados al hacerse foco en el mismo.