WPF - كيفية الحصول على متوسع واحد فقط توسيع في أي وقت واحد

StackOverflow https://stackoverflow.com/questions/1922723

  •  20-09-2019
  •  | 
  •  

سؤال

لدي StackPanel مع مجموعة من المتوسع في، كيف يمكنني تعيينها حتى يتم توسيع المتوسع فقط في أي وقت واحد؟

هتافات

أ

هل كانت مفيدة؟

المحلول

لم أكن أرغب حقا في القيام بذلك مثل هذا لأنه مطلوب وضع التعليمات البرمجية (C #) في الفصل خلف الملف للنافذة (أحاول تجنب هذا تماما عن طريق استخدام المشاهدة وغيرها).

من الناحية المثالية كنت قد وصفت هذا في XAML.

أنا مدمن مخبط كل حدث "موسع" متوسع كنت مهتما وقدم ما يلي:

    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.

نصائح أخرى

يمكنك إضافة خاصية التبعية هي "المتوسع الموسع"، ثم يمكنك ربط الممتلكات "الموسعة" إلى التعبير "theexpandedproperty ==" استخدام تقنية ربط التعبير المفضلة لديك (محول النوع، إلخ).

فيما يلي طريقة أكثر تفصيلا للقيام بذلك في 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top