在故事板将 IsExpanded 设置为 true 后,Expander 卡住了

Expander getting stuck after IsExpanded set to true by storyboard

所以我有一个扩展器,我希望它具有正常的功能(用它自己的按钮打开和关闭),但我也想要一个不同的按钮在按下时展开它(这个按钮在 header扩展器)。我在 Button.Click 的事件触发器中使用情节提要,但在以这种方式展开后,普通按钮不起作用,它只是保持展开状态。我的 xaml 在下面,我真的更愿意将所有这些都保留在 xaml 中,我可以自己想出一种方法在 codebehind/viewmodel 中完成。

<Expander x:Name="IndexExpander" IsExpanded="True" Grid.Row="4" Grid.ColumnSpan="5" Margin="10" MaxHeight="150">
                <Expander.Triggers>
                    <EventTrigger SourceName="btnAddIndex" RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames Storyboard.TargetName="IndexExpander" Storyboard.TargetProperty="IsExpanded" BeginTime="0:0:0.25" Duration="0:0:0.20" >
                                    <DiscreteBooleanKeyFrame KeyTime="0" Value="True" />
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Expander.Triggers>
                <Expander.Header>
                    <StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
                        <TextBlock Text="Indexes" FontWeight="Bold"/>

                        <!-- Add/Delete Buttons-->
                        <Grid Margin="10,0,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50*"/>
                                <ColumnDefinition Width="50*"/>
                            </Grid.ColumnDefinitions>
                            <Button Grid.Column="0" x:Name="btnAddIndex" Command="{Binding AddIndexCommand}" Template="{StaticResource AddButtonTemplate}" IsEnabled="{Binding IsEditable}" Margin="0,0,5,0" />
                        </Grid>
                    </StackPanel>
                </Expander.Header>

好吧,对于任何追随我脚步的人来说,这就是我所做的。我从 here 那里得到了这个想法,并对其进行了调整,直到它正常工作。

<Expander.Triggers>
    <EventTrigger SourceName="btnAddCol" RoutedEvent="Button.Click">
        <BeginStoryboard x:Name="ColumnExpanderStory">
            <Storyboard>
                <BooleanAnimationUsingKeyFrames Storyboard.TargetName="ColumnExpander" Storyboard.TargetProperty="IsExpanded">
                    <DiscreteBooleanKeyFrame KeyTime="0" Value="True" />
                </BooleanAnimationUsingKeyFrames>
             </Storyboard>
         </BeginStoryboard>
     </EventTrigger>
     <EventTrigger RoutedEvent="ToggleButton.PreviewMouseUp">
         <RemoveStoryboard BeginStoryboardName="ColumnExpanderStory" />
     </EventTrigger>
  </Expander.Triggers>
<Expander.Header>

问题是故事板覆盖了 IsExpanded 属性 的任何其他绑定,因此必须将其删除才能恢复它们(阅读更多内容 here)。建议是使用 ToggleButton.Checked 事件删除故事板,但这对我不起作用,只有 "Preview" 事件似乎有正确的时机。我从 PreviewMouseDown 开始,但它会删除故事板,然后在鼠标向上切换扩展器时,这意味着第一次单击只会快速来回翻转状态。使用 PreviewMouseUp 解决了这个问题。