visual studio redondos redondo redondear redondeados personalizados con botones bordes borde wpf xaml resources implicit-style

wpf - redondos - redondear botones en visual studio



Estilos implĂ­citos que no funcionan en controles personalizados (1)

Establecer BasedOn="{StaticResource {x:Type Button}}" obtendrá el estilo de botón predeterminado de WPF. Si desea utilizar el estilo definido en su App.xaml , deberá agregar una clave a ese estilo para que pueda referenciarlo desde su estilo de control:

App.xaml

<!-- Your style, just with an added x:Key --> <Style x:Key="myButtonStyle" TargetType="{x:Type Button}"> ... </Style> <!-- Set the above style as a default style for all buttons --> <Style TargetType="{x:Type Button}" BasedOn="{StaticResource myButtonStyle}">

Tus estilos de control y plantillas

<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource myButtonStyle}"> ... </Style>

En mi App.xaml tengo algunos estilos implícitos

<Style TargetType="{x:Type Button}"> ...Blah... </Style>

Estos estilos funcionan para el control siempre que no estén en un control personalizado que creo.

Mi control

public class NavigationControl : Control { public static readonly DependencyProperty ButtonStyleProperty = DependencyProperty.Register("ButtonStyle", typeof(Style), typeof(NavigationControl)); public Style ButtonStyle { get { return (Style)GetValue(ButtonStyleProperty); } set { SetValue(ButtonStyleProperty, value); } } } static NavigationControl() { DefaultStyleKeyProperty.OverrideMetadata(typeof(NavigationControl), new FrameworkPropertyMetadata(typeof(NavigationControl))); } public NavigationControl() { }

Mis estilos de control y plantillas

<ControlTemplate x:Key="NavigationControlTemplate" TargetType="{x:Type controls:NavigationControl}"> <Button Style="{TemplateBinding ButtonStyle}" </ControlTemplate> <Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> <Setter Property="MinWidth" Value="75"/> <Setter Property="Height" Value="50"/> <Setter Property="FontSize" Value="12"/> <Setter Property="Margin" Value="-1"/> </Style> <Style x:Key="ButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DefaultButtonStyle}"> <Setter Property="Template" Value="{StaticResource NavigationButtonTemplate}"/> </Style> <Style TargetType="{x:Type controls:NavigationControl}"> <Setter Property="Template" Value="{StaticResource NavigationControlTemplate}"/> <Setter Property="ButtonStyle" Value="{StaticResource ButtonStyle}"/> </Style>

Ahora supondría que BasedOn de DefaultButtonStyle lo obtendría desde el nivel de la aplicación. Pero no es así. La única forma de aplicar el estilo de nivel de aplicación es Anular el estilo de botón creando un estilo de tipo NavigationControl.

¿Hay alguna manera en que el estilo implícito hace que esto funcione?