una style para paginas pagina lista ejemplos decorar completa codigos codigo adicional xaml uwp styles uwp-xaml visualstates

xaml - style - lista de codigos css



¿Es posible tener dos plantillas de estilo para un elemento y decidir cuál usar en el código? (2)

Tengo un botón que tiene una plantilla de estilo en el modo A. En el modo A, este botón tiene un PointerOver VisualState. Uso el mismo botón cuando estoy en el modo B, pero en el modo B me gustaría tener un PointerOver VisualState diferente.

¿Cuál es la mejor manera de hacer algo como esto aprovechando los estados visuales? Estoy pensando en tener dos plantillas de estilo diferentes para el mismo botón y de alguna manera cambiar qué plantilla de estilo usar en el código subyacente, pero no estoy seguro si esto es posible o si esta es la mejor manera de abordar esto.

¿Alguna sugerencia?


Pruebe esto en su código detrás:

[control name].Style = this.FindResource("[style key]") as Style;

Además, no debes llamar a los estilos "plantillas de estilo", ya que no puedo entenderlo. Los estilos y las plantillas son dos cosas diferentes.

  • Las plantillas definen cómo se construye un control determinado. Por ejemplo, si un Button se genera con el uso de un Border y un TextBlock (o con algunos otros controles).
  • Los estilos definen un conjunto de propiedades que describen cómo se ve un control determinado (la plantilla es una de esas propiedades).

Otra opción es usar un Converter para decidir qué Style debería tener el Button .

Convertidor:

public class ButtonStyleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { var mode = (int)value; return mode == 1 ? Application.Current.Resources["ButtonStyle1"] as Style : Application.Current.Resources["ButtonStyle2"] as Style; } public object ConvertBack(object value, Type targetType, object parameter, string language) { //Do nothing } }

Uso:

<Button Content="Hello" Style="{Binding Button1Mode, Converter={StaticResource ButtonStyleConverter}}"/> <Button Content="World" Style="{Binding Button2Mode, Converter={StaticResource ButtonStyleConverter}}" />

Utilicé un Enlace a una propiedad en mi ViewModel, que en teoría le permitiría modificar el "Modo" en que se encuentra el botón en tiempo de ejecución, dependiendo de los Datos. Si necesita más código sobre esto, me gustaría publicar un ejemplo en Github.