WPF-如何让任何时候只扩展一个扩展器
我真的不想这样做,因为它需要把代码(C#)放在窗口文件后面的类中(我试图完全避免使用ViewModel等)。
理想情况下,我会在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
所以,这就是你如何在WinForms这样的老式框架中完成的。但它不是“WPF方式”,因为WPF要充分健壮,你想从数据中获得状态,而不是从事件中获取状态。 – 2009-12-25 18:27:37
我意识到这一点,因此我的意见,但我很高兴在代码背后 – AwkwardCoder 2009-12-28 16:56:06
是你可以随时把它放在一个列表框 - 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 2014-12-12 23:51:20
您可以添加一个依赖属性,其值为“即扩大了扩展,”然后你可以绑定“扩展”属性来表达“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 2010-04-09 19:53:34
404 - 找不到文件或目录。 http://forums.msdn.microsoft.com/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886#expander_list – schmoopy 2014-12-12 23:48:26
in XAML https://*.com/questions/897146/making -a-collection-of-wpf-expanders -extension-exclusive-ie-only-one-expande – 2017-08-24 00:17:17