我有一个ToggleButton,点击它会弹出一个FlowDocumentReader作为装饰器。这个FlowDocument是ControlTemplate的一部分,其中有一个DataTrigger来显示/隐藏元素。
使用以下触发器,一切都很好。我使用了一个DataTrigger和几个Setters,当我检查我的ToggleButton时,我的元素正确显示了高度和宽度:
Storyboard 上下文与 Setter 完全不同吗?为什么它在一个地方运行而另一个地方却不行?
奇怪的是,当我进行此更改时,会在输出窗口中显示绑定错误。我没有触及 DataTrigger 的实际绑定,只是其内容:
使用以下触发器,一切都很好。我使用了一个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 完全不同吗?为什么它在一个地方运行而另一个地方却不行?
奇怪的是,当我进行此更改时,会在输出窗口中显示绑定错误。我没有触及 DataTrigger 的实际绑定,只是其内容:
以下是模板的大致概念:System.Windows.Data Error: 4 : 找不到用于引用 '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>