tutorial para estilos español ejemplos datos conexion botones wpf datatrigger

para - wpf tutorial español



¿Cómo puedo proporcionar múltiples condiciones para la activación de datos en WPF? (3)

¿Cómo puedo proporcionar múltiples condiciones para la activación de datos en WPF?


@jasonk - si quieres tener "o" entonces niega todas las condiciones desde (A y B) <=> ~ (~ A o ~ B)

pero si tiene valores que no sean booleanos intente usar convertidores de tipo:

<MultiDataTrigger.Conditions> <Condition Value="True"> <Condition.Binding> <MultiBinding Converter="{StaticResource conditionConverter}"> <Binding Path="Name" /> <Binding Path="State" /> </MultiBinding> </Condition.Binding> <Setter Property="Background" Value="Cyan" /> </Condition> </MultiDataTrigger.Conditions>

puede usar los valores en el método Convert de la forma que desee para producir una condición que le convenga.


Para profundizar en la respuesta de @serine e ilustrar el trabajo con condiciones multivaluadas no triviales: tuve la necesidad de mostrar una superposición "difuminada" en un elemento para la condición booleana NOT a AND (b OR NOT c) .

Para el fondo, esta es una pregunta de "Opción múltiple". Si el usuario elige una respuesta incorrecta, se desactiva (se atenúa y no se puede seleccionar de nuevo). Un agente automatizado tiene la capacidad de enfocarse en cualquier elección particular para dar una explicación (borde resaltado). Cuando el agente se enfoca en un elemento, no debe atenuarse incluso si está desactivado . Todos los artículos que no están enfocados están marcados como des-enfocados , y deben ser atenuados.

La lógica para atenuar es así:

NOT IsFocused AND (IsDefocused OR NOT Enabled)

Para implementar esta lógica, hice un IMultiValueConverter genérico nombrado (torpemente) para que coincida con mi lógica

// ''P'' represents a parenthesis // ! a && ( b || ! c ) class NOT_a_AND_P_b_OR_NOT_c_P : IMultiValueConverter { // redacted [...] for brevity public object Convert(object[] values, ...) { bool a = System.Convert.ToBoolean(values[0]); bool b = System.Convert.ToBoolean(values[1]); bool c = System.Convert.ToBoolean(values[2]); return !a && (b || !c); } ... }

En el XAML, uso esto en un MultiDataTrigger en un MultiDataTrigger <Style><Style.Triggers>

<MultiDataTrigger> <MultiDataTrigger.Conditions> <!-- when the equation is TRUE ... --> <Condition Value="True"> <Condition.Binding> <MultiBinding Converter="{StaticResource NOT_a_AND_P_b_OR_NOT_c_P}"> <!-- NOT IsFocus AND ( IsDefocused OR NOT Enabled ) --> <Binding Path="IsFocus"/> <Binding Path="IsDefocused" /> <Binding Path="Enabled" /> </MultiBinding> </Condition.Binding> </Condition> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <!-- ... show the ''dim-out'' overlay --> <Setter Property="Visibility" Value="Visible" /> </MultiDataTrigger.Setters> </MultiDataTrigger>

Y para completar, mi convertidor se define en un ResourceDictionary

<ResourceDictionary xmlns:conv="clr-namespace:My.Converters" ...> <conv:NOT_a_AND_P_b_OR_NOT_c_P x:Key="NOT_a_AND_P_b_OR_NOT_c_P" /> </ResourceDictionary>


Usar el tipo MultiDataTrigger

<Style TargetType="ListBoxItem"> <Style.Triggers> <DataTrigger Binding="{Binding Path=State}" Value="WA"> <Setter Property="Foreground" Value="Red" /> </DataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Name}" Value="Portland" /> <Condition Binding="{Binding Path=State}" Value="OR" /> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="Cyan" /> </MultiDataTrigger> </Style.Triggers> </Style>