Wpf 展开/折叠所有扩展器
我有一个扩展器列表,我想用全局切换按钮控制其展开状态(IsExpanded),该按钮应该在展开/折叠状态之间切换 到目前为止,我得到的解决方案是通过将扩展器的IsExpanded状态绑定到togglebutton的IsChecked状态来实现的。只要我不手动切换扩展器,这就行了。一旦我这样做了,那些特定的扩展器就不尊重绑定(切换按钮的IsChecked状态) 知道为什么吗?有没有XAML的清洁溶液Wpf 展开/折叠所有扩展器,wpf,xaml,Wpf,Xaml,我有一个扩展器列表,我想用全局切换按钮控制其展开状态(IsExpanded),该按钮应该在展开/折叠状态之间切换 到目前为止,我得到的解决方案是通过将扩展器的IsExpanded状态绑定到togglebutton的IsChecked状态来实现的。只要我不手动切换扩展器,这就行了。一旦我这样做了,那些特定的扩展器就不尊重绑定(切换按钮的IsChecked状态) 知道为什么吗?有没有XAML的清洁溶液 <Page xmlns="http://schemas.microsoft.com/wi
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<StackPanel>
<ToggleButton Name="ExpandAll">Toggle</ToggleButton>
<Expander IsExpanded="{Binding ElementName=ExpandAll,Path=IsChecked, Mode=OneWay}">
Hai
</Expander>
<Expander IsExpanded="{Binding ElementName=ExpandAll,Path=IsChecked, Mode=OneWay}">
Hello
</Expander>
<Expander IsExpanded="{Binding ElementName=ExpandAll,Path=IsChecked, Mode=OneWay}">
Weird
</Expander>
</StackPanel>
</Grid>
</Page>
切换
海
你好
奇怪的
我认为您不能完全用XAML实现这一点,但下面允许您使用IValueConverter来实现这一点:
<StackPanel>
<StackPanel.Resources>
<local:Converter x:Key="Converter" />
</StackPanel.Resources>
<ToggleButton Name="ExpandAll">
<ToggleButton.IsChecked>
<MultiBinding Mode="OneWayToSource" Converter="{StaticResource Converter}">
<Binding ElementName="Expander1" Path="IsExpanded" />
<Binding ElementName="Expander2" Path="IsExpanded" />
<Binding ElementName="Expander3" Path="IsExpanded" />
</MultiBinding>
</ToggleButton.IsChecked>
Toggle</ToggleButton>
<Expander Name="Expander1">
Hai
</Expander>
<Expander Name="Expander2">
Hello
</Expander>
<Expander Name="Expander3">
Weird
</Expander>
</StackPanel>
这是通过在切换按钮的IsChecked
属性之间设置单向源
绑定来实现的(即,当目标值更改时,将针对源设置绑定),并使用IMultiValueConverter
将单个值转换为每个扩展器的一个值。我知道这篇文章很老了。只是把这个贴给任何遇到的人。下面的代码适用于我
<Expander IsExpanded="{Binding ElementName=ExpandAll, Path=IsChecked, UpdateSourceTrigger=Explicit}">
</Expander>
当扩展器是动态生成的,例如在DataGrid.rowtailstemplate
中时,这一功能就可以工作了。你知道如果扩展器不是固定的,而是由ItemsControl生成的,该解决方案如何修改吗?@Pradeep-不,我认为使用这种方法是不可能的,因为多重绑定
需要一个具体的绑定
列表。如果这是必需的,那么您可能需要考虑实现一个视图模型或(上帝禁止)一些代码behind@SteveGreatrex:在我们手动展开/折叠后,OP问题中的绑定会中断什么?WPF4中是否有比这里更好的方法?有什么意见吗?另外,UpdateSourceTrigger=Explicit
和Mode=TwoWay
对我也有帮助。
<Expander IsExpanded="{Binding ElementName=ExpandAll, Path=IsChecked, UpdateSourceTrigger=Explicit}">
</Expander>