J'ai un StackPanel avec un groupe d'expandeurs, comment est-ce que je le règle de sorte que seul l'expandeur soit développé à la fois?WPF - Comment faire pour étendre un seul expandeur à la fois
Vive
AW
J'ai un StackPanel avec un groupe d'expandeurs, comment est-ce que je le règle de sorte que seul l'expandeur soit développé à la fois?WPF - Comment faire pour étendre un seul expandeur à la fois
Vive
AW
Je ne voulais pas vraiment le faire car il fallait mettre du code (C#) dans la classe derrière le fichier pour la fenêtre (j'essaie d'éviter cela complètement en utilisant ViewModels etc).
Idéalement, je l'aurais décrit en XAML.
J'accroché, je me suis intéressé événement « élargi » tous les Expander et a fait ce qui suit:
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;
}
}
Vive
AWC
Donc, c'est comme ça que vous le feriez dans un cadre old-school comme WinForms. Cependant, ce n'est pas "la méthode WPF", car pour que WPF soit totalement robuste, vous voulez dériver l'état à partir des données, pas des événements. –
Je réalise cela, d'où mes commentaires, mais je suis heureux avec cela dans le code derrière – AwkwardCoder
Oui, vous pouvez toujours le mettre dans une liste - boooo --- votre chemin est BEAUCOUP MIEUX - ce n'est pas la façon WPF mais .. faire il est faux de faire en sorte que le WPF ne soit pas correct non plus! https://social.msdn.microsoft.com/Forums/vstudio/en-US/a2988ae8-e7b8-4a62-a34f-b851aaf13886/windows-presentation-foundation-faq?forum=wpf#expander_list – schmoopy
Vous pouvez ajouter une propriété de dépendance dont la valeur est « l'extension qui est développée, » et vous pouvez lier la propriété « élargie » à l'expression « theExpandedProperty == ce » en utilisant votre technique de liaison d'expression préférée (convertisseur de type, etc).
Voici une façon plus élaborée de le faire en WPF sans aucun code derrière:
<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>
J'ai trouvé une implémentation élégante, uniquement en XAML, de cette exigence. Cliquez sur [ici!] (Http://social.msdn.microsoft.com/forums/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886) – Dabblernl
404 - Fichier ou répertoire non trouvé. http://forums.msdn.microsoft.com/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886#expander_list – schmoopy
en XAML https://stackoverflow.com/questions/897146/making -a-collection-de-wpf-expandeurs-expand-exclusivement-ie-only-one-expande –