wpf triggers expander

Desencadenadores de expansores WPF



triggers expander (1)

Tengo 2 expansores uno al lado del otro. Solo se puede abrir 1 a la vez.

Quiero escribir Triggers para ellos directamente en su definición de esta manera:

<Expander x:Name="MenuOverView" ExpandDirection="Left"> <Expander.Triggers> <Trigger Property="IsExpanded" Value="False" SourceName="MenuDetailed"> <Setter Property="IsExpanded" Value="True" TargetName="MenuOverView" /> </Trigger> </Expander.Triggers> </Expander> <Expander x:Name="MenuDetailed" ExpandDirection="Right"> <Expander.Triggers> <Trigger Property="IsExpanded" Value="False" SourceName="MenuOverView"> <Setter Property="IsExpanded" Value="True" TargetName="MenuDetailed" /> </Trigger> </Expander.Triggers> </Expander>

Esto es, por supuesto, un código malo. ¿Cómo puedo hacer eso, por favor?


OK, creo que eso no es posible. Proporciono una solución en ese caso:

<!--Add this to the resources dictionary--> <conv:BoolInverterConverter x:Key="boolInvertorConverter" />

...

<Expander x:Name="MenuOverView" ExpandDirection="Left" IsExpanded="{Binding ElementName=MenuDetailed, Converter={StaticResource boolInvertorConverter}, Path=IsExpanded}" VerticalContentAlignment="Center" >

...

y proporciono el código del convertidor:

public class BoolInverterConverter : System.Windows.Data.IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool i; if (bool.TryParse(value.ToString(), out i) == false) return null; return !i; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool i; if (bool.TryParse(value.ToString(), out i) == false) return null; return !i; } #endregion }

¡Disfrutar!