2016-11-20 34 views
0

我試圖讓ContentControl施加ContentThemeTransition其中的內容將是一個字符串,所以當通過結合新路線的動畫。我也無法使用ContentThemeTransition字符串變化一個TextBlock,因爲這不是從ContentControl派生。UWP ContentControl中不適用ContentThemeTransition

下面是一些示例XAML,顯示該問題。如果我編輯文本框中的文本(代表我的ViewModel中的ContentControl真的綁定的文本),我希望ContentControl中顯示的文本具有動畫效果,但不會。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <TextBox Grid.Row="0" x:Name="text" Text="Hello" Width="100" Height="30"/> 
    <ContentControl Grid.Row="1" Width="100" Height="100" Content="{Binding ElementName=text , Path=Text}"> 
     <ContentControl.Transitions> 
      <TransitionCollection> 
       <ContentThemeTransition HorizontalOffset="40"/> 
      </TransitionCollection> 
     </ContentControl.Transitions> 
    </ContentControl> 
</Grid> 

我在做什麼錯?

非常感謝您的任何幫助。

更新:

好吧,現在到了某個地方。如果您將ContentControl XAML更換爲

<ContentPresenter Background="Black" Foreground="Red" Grid.Row="1" Width="100" Height="100" Content="{Binding ElementName=text , Path=Text}"> 
     <ContentPresenter.ContentTransitions> 
      <TransitionCollection> 
       <ContentThemeTransition VerticalOffset="-100"/> 
      </TransitionCollection> 
     </ContentPresenter.ContentTransitions> 
    </ContentPresenter> 

然後它可以工作。奇怪的是,在上述VerticalOffset = -100的情況下,新值在ContentControl之外動畫下來,即其在控制範圍外可見。任何人都知道如何改變東西,所以動畫只出現在ContentPresenter的範圍內?

回答

1

經過我身邊的測試,您的第一個<ContentThemeTransition HorizontalOffset="40"/>和第二個<ContentThemeTransition VerticalOffset="-100"/>都可以工作,但只能第一次,您可以放大HorizontalOffset進行測試並檢查它是否有效。

既然你期望動畫應該每工作的文本改變時,我想你會需要建立一個目標,而不是直接針對的ContentControlContentTextBlockText一個動畫。

在這種情況下,XAML Behaviors將是一個好幫手。你可以參考@Jerry尼克松 - MSFT的回答螺紋:How to animate TextBlock when its value changes in WinRT XAML?

更新:

我的錯,我只注意到你改變HorizontalOffsetVerticalOffset。您實際上也將ContentControl更改爲ContentPresenter

根據UWP的UI座標,由於您的動畫目標是ContentPresenter,因此請考慮ContentPresent的左上角爲(0,0)。當你設置<ContentThemeTransition VerticalOffset="-100"/>時,它會從up(0,-100)回到(0,0),它肯定會在你的ContentPresent之外動畫,我認爲它的設計是這樣的,我們不能改變它。在這裏,我只能建議修改從下往上的轉換,比如<ContentThemeTransition VerticalOffset="100"/>,它在這裏會有所幫助,但最終會改變你的動畫,所以我不認爲這會是一個好方法。

+0

Hi @Grace Feng,請在原帖中查看我的UPDATE。如果我使用ContentPresenter,那麼每次使用文本更改時都可以使用它。唯一的問題是,如果我使用'VerticalOffset = -100',那麼文本就會從ContentPresenter的邊界外漂浮,這看起來很奇怪。 – Cleve

+0

@Cleve,我的錯誤,我只注意到你將'Horizo​​ntalOffset'改爲'VerticalOffset',你實際上也改變了你的動畫目標。我稍後會更新我的答案。 –

+0

@Cleve,我已經更新了我的答案,對不起我的錯誤。 –

相關問題