Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 展开/折叠所有扩展器_Wpf_Xaml - Fatal编程技术网

Wpf 展开/折叠所有扩展器

Wpf 展开/折叠所有扩展器,wpf,xaml,Wpf,Xaml,我有一个扩展器列表,我想用全局切换按钮控制其展开状态(IsExpanded),该按钮应该在展开/折叠状态之间切换 到目前为止,我得到的解决方案是通过将扩展器的IsExpanded状态绑定到togglebutton的IsChecked状态来实现的。只要我不手动切换扩展器,这就行了。一旦我这样做了,那些特定的扩展器就不尊重绑定(切换按钮的IsChecked状态) 知道为什么吗?有没有XAML的清洁溶液 <Page xmlns="http://schemas.microsoft.com/wi

我有一个扩展器列表,我想用全局切换按钮控制其展开状态(IsExpanded),该按钮应该在展开/折叠状态之间切换

到目前为止,我得到的解决方案是通过将扩展器的IsExpanded状态绑定到togglebutton的IsChecked状态来实现的。只要我不手动切换扩展器,这就行了。一旦我这样做了,那些特定的扩展器就不尊重绑定(切换按钮的IsChecked状态)

知道为什么吗?有没有XAML的清洁溶液

<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>