Frage
Ich habe 2 Expander nebeneinander. Nur noch 1 kann zu einem Zeitpunkt geöffnet werden.
Ich möchte schreiben Trigger für sie direkt in ihrer Definition wie folgt aus:
<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>
Das ist natürlich ein schlechter Code .. Wie kann ich das bitte tun?
Lösung
OK denke ich das nicht möglich ist. Ich biete eine Lösung in diesem Fall:
<!--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" >
...
und ich biete den Converter Code:
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
}
Genießen Sie!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow