2012-10-30 18 views
2

我想添加淡入/淡出效果到一些文本(也就是WPF運行對象)。我不希望它一次切換Bold/notBold。我希望它在粗體和正常之間動畫。這可能嗎?可以通過順利更改WPF中的fontweight脈衝文本?

+0

我的猜測是否定的,因爲你只能渲染文字爲粗體或不粗體,所以字符會在兩者之間跳躍。如果它真的很重要,你可以嘗試編寫自己的文本渲染算法,但我不推薦它。更好的選擇是改變字體顏色,因爲你可以很容易地在兩者之間平滑過渡。您也可以使用兩個標籤,一個是粗體和另一個是正常的,然後將文本從一個文字移動到另一個文字(逐個字符),創建更平滑的過渡。 – Trisped

+0

我嘗試動畫重量,但得到一個錯誤 – Paparazzi

+0

我最終脈動的背景顏色,而不是文字。感謝您的顏色建議。 – Brannon

回答

2

我不認爲你可以在Fontweights之間進行動畫製作,因爲它們就像沒有「中間」狀態的固定值。我認爲最好的選擇是使用2個文本塊(一個普通文本和一個帶有相同文本的粗體文本),然後使用這兩種文本的不透明度進行動畫處理,使普通文本淡出,粗體淡入。這樣看起來就像字體以動畫形式從正常狀態轉變爲粗體狀態。

<Control> 
      <Control.Template> 
       <ControlTemplate> 
        <DockPanel> 
         <ToggleButton x:Name="btn" Content="IsBold"/> 
         <Grid Width="200"> 
          <TextBlock Text="Transition" x:Name="normal" TextAlignment="Center"/> 
          <TextBlock Text="Transition" FontWeight="Bold" Opacity="0" x:Name="bold" TextAlignment="Center"/> 
         </Grid> 
        </DockPanel> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsChecked" SourceName="btn" Value="True"> 
          <Trigger.EnterActions> 
           <BeginStoryboard> 
            <Storyboard Duration="00:00:01"> 
             <DoubleAnimation Storyboard.TargetName="normal" Storyboard.TargetProperty="Opacity" To="0"/> 
             <DoubleAnimation Storyboard.TargetName="bold" Storyboard.TargetProperty="Opacity" To="1"/> 
            </Storyboard> 
           </BeginStoryboard> 
          </Trigger.EnterActions> 
          <Trigger.ExitActions> 
           <BeginStoryboard> 
            <Storyboard Duration="00:00:01"> 
             <DoubleAnimation Storyboard.TargetName="normal" Storyboard.TargetProperty="Opacity" To="1"/> 
             <DoubleAnimation Storyboard.TargetName="bold" Storyboard.TargetProperty="Opacity" To="0"/> 
            </Storyboard> 
           </BeginStoryboard> 
          </Trigger.ExitActions> 
         </Trigger> 
        </ControlTemplate.Triggers> 



       </ControlTemplate> 
      </Control.Template> 
     </Control> 
+1

問題有間距。如果它是大膽的,它會更寬,所以新的文本會在過去時發生。仍+1 – Paparazzi