WPF - So werden gleichzeitig nur ein Expander erweitert
-
20-09-2019 - |
Frage
Ich habe ein Stackpanel mit einer Gruppe von Expandern, wie ich sie so einsetzt, dass nur der Expander jederzeit erweitert wird?
Prost
Aw
Lösung
Ich wollte es nicht wirklich so machen, da es erforderte, dass Code (C#) in die Klasse hinter der Datei für das Fenster eingestuft wird (ich versuche, dies durch ViewModels usw. vollständig zu vermeiden).
Idealerweise hätte ich das in XAML beschrieben.
Ich habe jedes Expander "erweiterte" Ereignis angeschlossen, an dem ich interessiert war, und machte Folgendes:
private void HandleExpanderExpanded(object sender, RoutedEventArgs e)
{
ExpandExculsively(sender as Expander);
}
private void ExpandExculsively(Expander expander)
{
foreach (var child in findPanel.Children)
{
if (child is Expander && child != expander)
((Expander)child).IsExpanded = false;
}
}
Prost
AWC
Andere Tipps
Sie können eine Abhängigkeitseigenschaft hinzufügen, deren Wert "der Expander erweitert" ist, und dann können Sie die "erweiterte" Eigenschaft an den Ausdruck "TheexpandedProperty == this" verwenden, indem Sie Ihre Lieblings -Expression -Bindungstechnik (Typwandler usw.) verwenden.
Hier ist eine ausführlichere Möglichkeit, dies in WPF ohne Code dahinter zu tun:
<UserControl.Resources>
<ResourceDictionary>
...
<Style TargetType="{x:Type Expander}">
<Setter Property="IsExpanded" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="{x:Null}" Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollViewer VerticalAlignment="Top" HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Auto" VerticalContentAlignment="Top" BorderThickness="0,0,0,0" Grid.RowSpan="1" Grid.Row="0">
<ListBox x:Name="OrdersListBox" BorderThickness="0" ItemContainerStyle="{StaticResource ShellThemeListBoxStyle}"
IsSynchronizedWithCurrentItem="True"
prism:RegionManager.RegionName="{x:Static uiCommon:RegionNames.WorkSheetsRegion}" Background="#00000000">
<ListBox.ItemTemplate>
<DataTemplate DataType="typeData:WorkSheetsDetialsViewModel">
<local:WorkSheetsDetialsView/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
...
</Grid>
<UserControl
x:Class="Module.ExcelDocumentManager.WorkSheets.WorkSheetsDetialsView"
...>
<Expander>
<Expander.Header>
<TextBlock Text="{Binding HeaderInfo}" RenderTransformOrigin=".5,.5">
</TextBlock>
</Expander.Header>
...
</Expander>
</UserControl>