C# 访问父级';孩子的名字镜
在XAML中,我有如下代码:C# 访问父级';孩子的名字镜,c#,wpf,xaml,C#,Wpf,Xaml,在XAML中,我有如下代码: <Style TargetType="Button"> <Setter Property="Foreground" Value="#c10000" x:Name="TextColor"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button">
<Style TargetType="Button">
<Setter Property="Foreground" Value="#c10000" x:Name="TextColor"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="RootElement" CornerRadius="8">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="TextColor"
Storyboard.TargetProperty="Foreground" To="#FF8D00" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
此代码失败,并显示一条消息,说明在边框的名称范围中找不到“TextColor”。如何访问定义TextColor的名称范围?
ColorAniamtion应该使用前台属性访问setter并更改颜色。设置按钮的
前台属性的动画,而不是设置setter
的动画。由于前景
属性的类型为画笔
,而不是颜色
,因此我在下面的示例代码中使用对象动画而不是颜色动画:
<Button.Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="#c10000"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="RootElement" CornerRadius="8">
<ContentPresenter/>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="MouseOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Foreground)">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="#FF8D00"/>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
这是可行的,但是否可以通过某种方式增加持续时间?例如,颜色将在1秒内逐渐变化?不,对于对象动画,您不能执行逐渐的颜色变化。