У меня есть StackPanel с группой расширителей, как я могу установить его так, чтобы только расширитель расширялся в любой момент времени?WPF - Как получить только один расширитель, расширенный в любой момент
Приветствия
AW
У меня есть StackPanel с группой расширителей, как я могу установить его так, чтобы только расширитель расширялся в любой момент времени?WPF - Как получить только один расширитель, расширенный в любой момент
Приветствия
AW
Я действительно не хотел делать это так, как это требовало ввода кода (C#) в класс за файлом для окна (я пытаюсь избежать этого полностью с помощью ViewModels и т. Д.).
В идеале я бы описал это в XAML.
Я подключил каждый Expander «Expanded» событие я был заинтересован и сделал следующее:
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
Итак, так вы можете сделать это в среде старой школы, такой как WinForms. Это не «способ WPF», хотя для того, чтобы WPF был полностью надежным, вы хотите получить состояние из данных, а не из событий. –
Я понимаю это, следовательно, мои комментарии, но я доволен этим в коде позади – AwkwardCoder
Да, вы всегда можете поместить его в список - boooo --- ваш путь МНОГО ЛУЧШЕ - его не способ WPF, но .. делать это неправильно сделать так, чтобы WPF не был прав! https://social.msdn.microsoft.com/Forums/vstudio/en-US/a2988ae8-e7b8-4a62-a34f-b851aaf13886/windows-presentation-foundation-faq?forum=wpf#expander_list – schmoopy
Вы можете добавить свойство зависимостей, значение которого «расширитель, который расширяется», а затем вы можете связать свойство выражения «расширенной» «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>
Я нашел элегантную реализацию XAML этого требования. Нажмите [здесь!] (Http://social.msdn.microsoft.com/forums/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886) – Dabblernl
404 - Файл или каталог не найдены. http://forums.msdn.microsoft.com/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886#expander_list – schmoopy
в XAML https://stackoverflow.com/questions/897146/making -a-collection-of-wpf-expanders-expand-only-ie-only-one-expande –