WPF - Как расширить только один расширитель за один раз - PullRequest
8 голосов
/ 17 декабря 2009

У меня есть StackPanel с группой расширителей, как мне установить так, чтобы в каждый момент времени расширялся только расширитель?

Приветствия

AW

Ответы [ 3 ]

5 голосов
/ 21 декабря 2009

Я действительно не хотел делать это так, поскольку требовалось поместить код (C #) в класс за файлом для окна (я пытаюсь полностью избежать этого, используя ViewModels и т. Д.).

В идеале я бы описал это в XAML.

Я подключил каждое интересующее меня событие Expander, и сделал следующее:

    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;
        }
    }

Приветствия

AWC

1 голос
/ 17 декабря 2009

Вы можете добавить свойство зависимости, значением которого является «расширенный расширитель», а затем вы можете привязать свойство «расширенное» к выражению «TheExpandedProperty == this», используя ваш любимый метод привязки выражений (преобразователь типов и т. Д.). ).

0 голосов
/ 15 мая 2017

Вот более сложный способ сделать это в WPF без какого-либо кода:

<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>
...