我正在尝试创建一个按钮,其行为类似于iPhone上的“滑动”按钮。我有一个动画,可以调整按钮的位置和宽度,但我希望这些值基于控件中使用的文本。目前,它们已被硬编码。
到目前为止,这是我正在使用的XAML:
<CheckBox x:Class="Smt.Controls.SlideCheckBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Smt.Controls"
xmlns:System.Windows="clr-namespace:System.Windows;assembly=PresentationCore"
Name="SliderCheckBox"
mc:Ignorable="d">
<CheckBox.Resources>
<System.Windows:Duration x:Key="AnimationTime">0:0:0.2</System.Windows:Duration>
<Storyboard x:Key="OnChecking">
<DoubleAnimation Storyboard.TargetName="CheckButton"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"
Duration="{StaticResource AnimationTime}"
To="40" />
<DoubleAnimation Storyboard.TargetName="CheckButton"
Storyboard.TargetProperty="(Button.Width)"
Duration="{StaticResource AnimationTime}"
To="41" />
</Storyboard>
当我尝试将DoubleAnimations中的“ To”属性绑定到文本的实际宽度时,就出现了问题,就像在ControlTemplate中所做的一样。如果将值绑定到ControlTemplate中某个元素的ActualWidth,则该控件将显示为空白复选框(我的基类)。但是,我绑定到ControlTemplate本身中的相同ActualWidths,没有任何问题。似乎只是CheckBox.Resources出现了问题。
例如,以下将破坏它:
<DoubleAnimation Storyboard.TargetName="CheckButton"
Storyboard.TargetProperty="(Button.Width)"
Duration="{StaticResource AnimationTime}"
To="{Binding ElementName=CheckedText, Path=ActualWidth}" />
我不知道这是否是因为它试图绑定到在渲染过程完成之前或其他情况下不存在的值。有人对这种动画绑定有任何经验吗?
相关分类