我有以下xaml代码的几个实例。基本上它是一堆网格,以小的(24像素高)状态显示在堆叠面板中,显示文本块的一行。当您单击箭头图像(或者更确切地说是图像周围的边框,因为图像中有透明度)时,网格会展开以显示其中的所有细节。我总共有15个这样的人:
<Grid x:Name="borLecSec1" Style="{StaticResource SearchedSectionGrid}">
<TextBlock x:Name="txtLecSec1" Style="{StaticResource SearchedSectionText}"
PointerEntered="SearchSectionEntered" PointerExited="SearchSectionExited"
Tapped="SearchSectionTapped"/>
<Border x:Name="backArrowSection_Lec_1" Style="{StaticResource ExpandSectionButton}"
PointerEntered="backArrowSectionEnter" PointerExited="backArrowSectionExit"
Tapped="backArrowSectionTapped">
<Image x:Name="arrowSection_Lec_1" Style="{StaticResource ExpandSectionImage}">
<Image.RenderTransform>
<CompositeTransform ScaleY="1"/>
</Image.RenderTransform>
</Image>
</Border>
</Grid>
我还没弄明白如何让网格自动扩展,因为它们必须从24像素变为自动,而我还没有开始工作。我的工作是点击时,此箭头垂直翻转,现在它表示另一次点击将导致网格崩溃。这个动画的故事板是这样的:
<Storyboard x:Name="SearchSectionArrowExpand">
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"
From="1" To="-1" Duration="00:00:0.15"/>
</Storyboard>
<Storyboard x:Name="SearchSectionArrowCollapse">
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"
From="-1" To="1" Duration="00:00:0.15"/>
</Storyboard>
由于此箭头图像控件有很多实例,故事板的目标属性在C#代码后面的每个Begin()语句之前都会更改。我的代码如下。其中,work_grid和working_image对象分别对应于上面的xaml中的borLecSec1和arrowSection_Lec_1。
if (working_grid.Height == 24)
{
System.Diagnostics.Debug.WriteLine("expand");
working_grid.Height = double.NaN;
SearchSectionArrowCollapse.Stop();
SearchSectionArrowExpand.Stop();
Storyboard.SetTargetName(SearchSectionArrowExpand, working_image_name);
SearchSectionArrowExpand.Begin();
}
代码的崩溃部分在随后的其他部分非常相似。 Stop()命令是必要的,因为如果他们不知道在重新定位之前必须停止根故事板,我会收到错误。所以我所说的一切都很好。不起作用的是,如果我展开第一个网格,那么arrowSection_Lec_1的ScaleY为-1,如果我然后展开第二个网格给arrowSection_Lec_2一个ScaleY为-1,则第一个图像恢复为具有即使其相应的网格仍然展开,ScaleY为1。
我想到的解决方案是让故事板Completed事件明确地设置相应箭头的ScaleY,这样即使故事板再次针对不同的箭头运行,它也会保持这个位置。我无法弄清楚如何在C#中引用这个属性。
为了清楚起见,我的问题是如何将arrowSection_Lec_1的ScaleY变换设置为-1来自后面的代码?
答案 0 :(得分:0)
以下是如何从代码隐藏中访问Scale:
var transform = (CompositeTransform)arrowSection_Lec_1.RenderTransform;
transform.ScaleY = -1;