Frage

Ich habe ein Stackpanel mit einer Gruppe von Expandern, wie ich sie so einsetzt, dass nur der Expander jederzeit erweitert wird?

Prost

Aw

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top