style fancy buttons wpf xaml button styles

fancy - style buttons wpf



Aplicar estilo para botones en todas las ventanas de WPF (4)

Diccionario de referencia de Google. Puedes poner todos tus estilos allí. luego, solo agrega una "referencia" en tu ventana / control de usuario.

<UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/SialTPChat.UI.Design;component/Styles/Styles.xaml" /> </ResourceDictionary> </UserControl.Resources>

Ahora, todos los estilos del archivo XAML mencionado anteriormente se aplicarán a todos los objetos en el control de usuario.

Tengo una configuración de estilo en mi XAML para la creación de Button esquina redonda en mi ventana de WPF. Me gustaría que este estilo se aplique a todos los botones en todas las ventanas de mi aplicación.

¿Hay alguna manera, similar a CSS, de poder poner esto en otro archivo y hacer referencia a él de alguna manera en todas mis ventanas? ¿O solo tengo que copiar y pegar todo el tiempo?


La forma más fácil para mí es:

  1. Haga clic derecho en un botón en la superficie de diseño

  2. Elija Editar plantilla-> Editar una copia

  3. Elija el botón de opción "Definir en la aplicación"

  4. El estilo se creará en el archivo App.xaml

  5. Agregue ese recurso a cada botón con la etiqueta "style"


Puede usar los recursos de la aplicación para hacer eso.

Aquí hay un poco de código, por ejemplo (en app.xaml)

<Application.Resources> <Style TargetType="Button" x:Key="GelButton" > <Setter Property="Margin" Value="1,2,1,2"/> <Setter Property="HorizontalAlignment" Value="Left"/> </Style> </Application.Resources>

y luego, para sus botones (por ejemplo):

<Button Height="50" Width="250" Style="{StaticResource GelButton}" Content="Button 1" /> <Button Height="50" Width="250" Style="{StaticResource GelButton}" Content="Button 2" />

Espero que esto te ayude a encontrar lo que estás buscando.


Si quieres hacerlo de una manera limpia, puedes crear un ResourceDictionary.xaml , que tenga la misma función que CSS en el diseño web.

Primero, vaya a su proyecto y agregue un ResourceDictionary . Dentro de él puede agregar estilos para todos los elementos deseados que desee, por ejemplo, cambiar el fondo de color de un Button que se aplica a todos sus botones:

// Base style for all buttons <Style TargetType="Button"> <Setter Property="Background" Value="Red" /> </Style>

Si no especifica un identificador en cada Style , ese estilo se aplicará a todos los controles que coincidan con el TargetType que especificó. Si desea que el botón se vea diferente, puede hacer lo mismo que arriba, pero también incluir un identificador para ese estilo, que será utilizado por cada botón diferente:

// Specific style for blue buttons <Style TargetType="Button" x:Key="BlueButton"> <Setter Property="Background" Value="Blue" /> </Style>

Luego, en cada .xaml que desee que se apliquen estilos, debe agregar la referencia a este ResourceDictionary.xaml que está creando:

<Window.... > <Window.References> <ResourceDictionary> <ResourceDictionary Source="MyResourceDictionary.xaml" /> </ResourceDictionary> </Window.References> <Grid> <Button Content="Button with red background" /> <Button Style="{StaticResource BlueButton}" Content="Button with blue background" /> </Grid> </Window>

Creo que esto es lo que estás buscando.

Si desea dibujar un botón redondo, debe sobrescribir la propiedad Template del botón. Esto significa que necesita decirle al botón cada acción que necesita hacer desde el momento en que la anula. Mira here . Entonces, en un concepto pequeño y reducido, le gustaría escribir algo como esto:

<Style TargetType="Button"> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="Foreground" Value="White" /> <Setter Property="Background" Value="DarkBlue" /> <Setter Property="Width" Value="150" /> <Setter Property="Height" Value="35" /> <Setter Property="FontSize" Value="16" /> <Setter Property="FontFamily" Value="Calibri" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border Background="{TemplateBinding Background}" BorderBrush="LightBlue" BorderThickness="1" CornerRadius="15,0,15,0" x:Name="bd"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="bd" Property="Background" Value="LightGray"/> <Setter Property="Foreground" Value="White" /> <Setter Property="Cursor" Value="Hand" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>

Veo que aquí anulo todas las propiedades básicas necesarias para dibujar un botón funcional básico, como Foreground , Background , Width ... y el evento MouseOver , para cambiar el color al pasar el mouse sobre él. La propiedad CornerRadius de Border dentro de ControlTemplate es el radio que está buscando.

Básicamente, está anulando la propiedad de borde que viene por defecto para todos los botones.