2014-10-30 32 views
1

控件的內容是否可以對其父項的視覺狀態變化做出反應?對內容狀態變化的反應(Windows Phone)

在下面的例子中,當父控件處於活動狀態時,我希望textblock的前景變爲紅色。但是這個代碼不工作:

<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> 
+0

,故事情節可以向內的目標 - 那就是,如果你設置本地的VisualStateGroups:ExpandKeyButton,它仍然可以修改TextBlock的 – bdimag 2014-10-30 21:23:55

+0

@bdimag第一部分是真實的,但第二個不是,因爲'VisualStateGroups'在那裏將是無效的。 VisualStateGroups只能在ControlTemplate或UserControl的根元素下定義。 – McGarnagle 2014-10-31 00:47:53

回答

1

否 - 可視狀態是內部控制,在這個意義上,擁有控件模板外UI元素不能(直接)參與的視覺狀態的變化。我能看到一些可能在您的方案:

  1. 如果「TB」的TextBlock是「ExpandKeyButton」的一般特徵,然後將它的控件模板內,要允許它參與的視覺狀態的變化。
  2. 或者,對於更鬆散耦合的方法,請將屬性或事件添加到「ExpandKeyButton」控件,以允許TextBlock綁定到其狀態。例如,您可以添加一個「IsActive」依賴項屬性,您可以在ControlTemplate的VisualStateManager內適當地設置該屬性,然後當控件處於活動狀態時,TextBlock可以使用類似Foreground="{Binding ElementName=xpand,Path=IsActive,Converter={StaticResource ActiveToColorConverter}}"的綁定。