【发布时间】:2010-11-09 21:41:23
【问题描述】:
以下是我定制的扩展器模板的一部分:
<Grid
x:Name="ExpandSiteContainer"
Visibility="Visible"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
DockPanel.Dock="Bottom">
<!--<Grid.Height>
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualHeight" ElementName="ExpandSite"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Grid.Height>-->
<Grid.Width>
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualWidth" ElementName="ExpandSite"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Grid.Width>
<Grid.Tag>
<sys:Double>0.0</sys:Double>
</Grid.Tag>
<ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden">
<ContentPresenter x:Name="ExpandSite" Focusable="false" VerticalAlignment="Top"/>
</ScrollViewer>
</Grid>
我还定义了以下触发器:
<Trigger Property="IsExpanded" Value="true">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName ="ExpandSiteContainer" Storyboard.TargetProperty = "Tag" To="1.0" Duration ="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName ="ExpandSiteContainer" Storyboard.TargetProperty ="Tag" To="0" Duration ="0:0:0.25"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
当 IsExpanded 属性发生变化时,扩展器将使用上述定义的情节提要滑动打开/关闭。
我想做的是以某种方式“传入”会修改其行为的值:
请注意,模板中的 Grid.Height 部分已被注释掉。它被注释掉了,因为现在我的扩展器向右展开,我只想修改网格的宽度。有什么我可以做的,以便根据扩展器的 ExpandDirection,我可以更改模板的行为方式(如果 ExpandDirection 向上或向下,则更改高度,如果 ExpandDirection 向左或向右,则更改宽度)?
有没有一种方法可以更改模板中为不同扩展器定义的动画的持续时间,还是需要创建单独的模板?
谢谢。
【问题讨论】:
-
如果触发器没有做你想做的事,你有没有看过模板选择器?您可以使用一些属性对 DataTemplateSelector 进行子类化,并根据这些属性设置值。
标签: wpf wpf-controls binding