wpf - Storyboard未从 ControlTemplate DataTrigger 执行

标签 wpf storyboard controltemplate datatrigger

我有一个 ToggleButton,我点击它弹出一个 FlowDocumentReader 作为装饰器。此 FlowDocument 是带有 DataTrigger 的 ControlTemplate 的一部分,用于显示/隐藏元素。

使用以下触发器一切正常。我使用 DataTrigger 和一些 Setters,我的元素正确显示了我在检查 ToggleButton 时提供的高度和宽度:

<ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding ElementName=adorner, Path=AdornedElement.IsChecked}" Value="True" >
        <Setter TargetName="mainBorder" Property="Height" Value="437"></Setter>
        <Setter TargetName="mainBorder" Property="Width" Value="537"></Setter>
    </DataTrigger>
</ControlTemplate.Triggers>

我想要在我的元素出现时出现一些动画,所以我尝试使用 Storyboard。这不起作用,似乎什么也没发生:

<ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding ElementName=adorner, Path=AdornedElement.IsChecked}" Value="True" >
        <DataTrigger.EnterActions>
            <BeginStoryboard>
                <Storyboard Storyboard.TargetName="mainBorder">
                    <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="Width"  To="537" />
                    <DoubleAnimationUsingKeyFrames BeginTime="0:0:0.2" Duration="0:0:0.3" Storyboard.TargetProperty="Height">
                        <LinearDoubleKeyFrame Value="417" KeyTime="0:0:0.2" />
                        <LinearDoubleKeyFrame Value="437" KeyTime="0:0:0.24" />
                        <LinearDoubleKeyFrame Value="417" KeyTime="0:0:0.3" />
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
        <DataTrigger.ExitActions>
            <BeginStoryboard>
                <Storyboard Storyboard.TargetName="mainBorder">
                    <DoubleAnimationUsingKeyFrames Duration="0:0:0.2" Storyboard.TargetProperty="Width">
                        <LinearDoubleKeyFrame Value="0" KeyTime="0:0:0.2" />
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames BeginTime="0:0:0.2" Duration="0:0:0.2" Storyboard.TargetProperty="Height">
                        <LinearDoubleKeyFrame Value="0" KeyTime="0:0:0.2" />
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.ExitActions>
    </DataTrigger>
</ControlTemplate.Triggers>

Storyboard 上下文与 Setter 完全不同吗?为什么它在一个地方起作用,而在另一个地方不起作用?

奇怪的是,当我进行此更改时,它会导致在输出窗口中显示绑定(bind)错误。我没有触及 DataTrigger 的实际绑定(bind),只是内容:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=adorner'. BindingExpression:Path=AdornedElement.IsChecked; DataItem=null; target element is 'Control' (Name=''); target property is 'NoTarget' (type 'Object')

以下是模板其余部分的总体思路:

<ControlTemplate x:Key="LocalHelpWindow">
    <Grid>
        <Grid.RowDefinitions>
        ...
        </Grid.RowDefinitions>
        <help:AdornedPlaceholder x:Name="adorner" Grid.Row="0"/>
        <Border Grid.Row="1"  x:Name="mainBorder">
            ...
        </Border>
    </Grid>
    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding ElementName=adorner, Path=AdornedElement.IsChecked}" Value="True" >
            ...
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

最佳答案

我认为在您的情况下,您应该使用 Trigger 而不是 DataTrigger。 DataTrigger 用于绑定(bind)到应用了 DataTemplate 的元素的 DataContext 中的某些数据。

我建议您尝试以这种方式使用 Trigger:

<Trigger SourceName="adorner" Property="AdornedElement.IsChecked" Value="True">
    ...
</Trigger>

关于wpf - Storyboard未从 ControlTemplate DataTrigger 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19735187/

相关文章:

c# - 在自动生成的 GridView WPF C# 中仅显示日期

c# - 在'System.Windows.StaticResourceExtension 上提供值(value)

c# - 如何识别 WPF TextBox 中的 ValidationError ToolTip 位置

ios - 为什么我的 UIButton 在分配图像后改变大小和位置?我怎样才能保持不变?

wpf - 是否可以像在 WPF 中扩展样式一样扩展 ControlTemplate?

c# - 删除已被 WPF 控件使用的图像

swift - 台风以编程方式加载 Storyboard似乎可以在不阻塞的情况下执行异步实例化

ios - 如何让tableview控件适合整个屏幕

wpf - 使用 ControlTemplate 内的控件进行焦点处理

c# - Windows 8 Metro-UI 的控件样式和模板