首页 文章

故事板不从ControlTemplate DataTrigger执行

提问于
浏览
3

我有一个ToggleButton,我点击它弹出FlowDocumentReader作为Adorner . 此FlowDocument是ControlTemplate的一部分,带有DataTrigger以显示/隐藏元素 .

使用以下触发器一切正常 . 我使用DataTrigger和一些Setter,当我检查我的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>

故事板上下文与Setter完全不同吗?为什么它在一个地方工作,而不是另一个地方?

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

System.Windows.Data错误:4:找不到引用'ElementName = adorner'的绑定源 . BindingExpression:路径= AdornedElement.IsChecked;的DataItem = NULL; target元素是'Control'(Name =''); target属性是'NoTarget'(类型'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>

1 回答

  • 2

    我认为在你的情况下你应该使用Trigger而不是DataTrigger . DataTrigger用于绑定应用DataTemplate的元素的DataContext中的某些数据 .

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

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

相关问题