对内容状态更改做出反应(Windows Phone)

时间:2014-10-30 21:17:23

标签: c# wpf xaml windows-phone windows-phone-8.1

控件的内容是否有可能对其父级的视觉状态变化作出反应?

在以下示例中,当父控件处于活动状态时,我希望文本块的前景更改为红色。但是这段代码不起作用:

<local:ExpandKeyButton x:Name="xpand" Height="30">
    <TextBlock x:Name="tb">
        Test
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="General">
                <VisualState x:Name="Idle" />
                <VisualState x:Name="Active">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="tb" Storyboard.TargetProperty="Foreground">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Red" />
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </TextBlock>
</local:ExpandKeyButton>

1 个答案:

答案 0 :(得分:1)

否 - 视觉状态是控件的内部状态,因为拥有ControlTemplate之外的UI元素不能(直接)参与视觉状态更改。我可以在你的场景中看到一些可能性:

  1. 如果&#34; tb&#34; TextBlock是&#34; ExpandKeyButton&#34;的一般功能,然后将其移到ControlTemplate中,以允许它参与视觉状态更改。
  2. 或者,对于更松散耦合的方法,将属性或事件添加到&#34; ExpandKeyButton&#34;控制,以允许TextBlock绑定到其状态。例如,您可以添加一个&#34; IsActive&#34;依赖属性,您可以在ControlTemplate的VisualStateManager中进行适当设置 - 然后TextBlock可以使用类似Foreground="{Binding ElementName=xpand,Path=IsActive,Converter={StaticResource ActiveToColorConverter}}"的绑定在控件处于活动状态时将其设置为红色。