2012-02-15 4 views
1

Я пытаюсь сделать текст гиперссылки полужирным шрифтом в Silverlight 4 с помощью XAML. Я пробовал модифицировать шаблон HyperlinkButton, но я получаю InvalidOperationException: TargetProperty "(Content) .FontWeight" не может быть разрешен.Изменение веса шрифта Hyperlinkbutton на MouseOver

Что я делаю неправильно?

.... 
<ControlTemplate TargetType="HyperlinkButton"> 
     <Grid x:Name="ButtonGrid" Cursor="{TemplateBinding Cursor}"> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
      <VisualState x:Name="Normal"/> 
      <VisualState x:Name="MouseOver"> 
       <Storyboard> 
       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="(Content).FontWeight" Duration="0"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="Bold" /> 
       </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
... 
</ControlTemplate> 

ответ

2

Я создал две раскадровки для метки, а затем анимировал их с использованием поведения. Раскадровка выглядела как внизу.

 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="label" Storyboard.TargetProperty="(Control.FontWeight)"> 
     <DiscreteObjectKeyFrame KeyTime="0"> 
      <DiscreteObjectKeyFrame.Value> 
       <FontWeight>Normal</FontWeight> 
      </DiscreteObjectKeyFrame.Value> 
     </DiscreteObjectKeyFrame> 
     <DiscreteObjectKeyFrame KeyTime="0:0:1"> 
      <DiscreteObjectKeyFrame.Value> 
       <FontWeight>Bold</FontWeight> 
      </DiscreteObjectKeyFrame.Value> 
     </DiscreteObjectKeyFrame> 
     </ObjectAnimationUsingKeyFrames> 

Редактировать: Я думал, вы спрашивали об анимации веса шрифта в целом. В случае кнопки гиперссылки вы можете отредактировать шаблон контента и вставить в него текстовый блок/ярлык и оживить его.

<HyperlinkButton Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="hyperlinkButton1" VerticalAlignment="Top" Width="100" > 
     <HyperlinkButton.Resources> 
      <Style x:Key="HyperlinkButtonStyle1" TargetType="HyperlinkButton"> 
       <Setter Property="Foreground" Value="#FF73A9D8"/> 
       <Setter Property="Padding" Value="2,0,2,0"/> 
       <Setter Property="Cursor" Value="Hand"/> 
       <Setter Property="HorizontalContentAlignment" Value="Left"/> 
       <Setter Property="VerticalContentAlignment" Value="Top"/> 
       <Setter Property="Background" Value="Transparent"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="HyperlinkButton"> 
          <Grid Background="{TemplateBinding Background}" Cursor="{TemplateBinding Cursor}"> 
           <VisualStateManager.VisualStateGroups> 
            <VisualStateGroup x:Name="CommonStates"> 
             <VisualState x:Name="Normal"/> 
             <VisualState x:Name="MouseOver"> 
              <Storyboard> 
               <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="UnderlineTextBlock"> 
                <DiscreteObjectKeyFrame KeyTime="0"> 
                 <DiscreteObjectKeyFrame.Value> 
                  <Visibility>Collapsed</Visibility> 
                 </DiscreteObjectKeyFrame.Value> 
                </DiscreteObjectKeyFrame> 
               </ObjectAnimationUsingKeyFrames> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Pressed"> 
              <Storyboard> 
               <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="UnderlineTextBlock"> 
                <DiscreteObjectKeyFrame KeyTime="0"> 
                 <DiscreteObjectKeyFrame.Value> 
                  <Visibility>Visible</Visibility> 
                 </DiscreteObjectKeyFrame.Value> 
                </DiscreteObjectKeyFrame> 
               </ObjectAnimationUsingKeyFrames> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Disabled"> 
              <Storyboard> 
               <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOverlay"> 
                <DiscreteObjectKeyFrame KeyTime="0"> 
                 <DiscreteObjectKeyFrame.Value> 
                  <Visibility>Visible</Visibility> 
                 </DiscreteObjectKeyFrame.Value> 
                </DiscreteObjectKeyFrame> 
               </ObjectAnimationUsingKeyFrames> 
              </Storyboard> 
             </VisualState> 
            </VisualStateGroup> 
            <VisualStateGroup x:Name="FocusStates"> 
             <VisualState x:Name="Focused"> 
              <Storyboard> 
               <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualElement"/> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Unfocused"/> 
            </VisualStateGroup> 
           </VisualStateManager.VisualStateGroups> 
           <TextBlock x:Name="UnderlineTextBlock" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}" TextDecorations="Underline" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
           <TextBlock x:Name="DisabledOverlay" Foreground="#FFAAAAAA" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Canvas.ZIndex="1"/> 
           <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
           <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Opacity="0" Stroke="#FF6DBDD1" StrokeThickness="1"/> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
      <DataTemplate x:Key="DataTemplate1"> 
       <Grid> 
        <!--Make your adimation related changes to this textblock--> 
        <TextBlock Text="{Binding}" /> 
       </Grid> 
      </DataTemplate> 
     </HyperlinkButton.Resources> 
     <HyperlinkButton.ContentTemplate> 
      <StaticResource ResourceKey="DataTemplate1"/> 
     </HyperlinkButton.ContentTemplate> 
     <HyperlinkButton.Style> 
      <StaticResource ResourceKey="HyperlinkButtonStyle1"/> 
     </HyperlinkButton.Style> 
     <HyperlinkButton.Content> 
      test 
     </HyperlinkButton.Content> 
    </HyperlinkButton> 
1

ContentPresenter не имеет FontWeight свойство. Вы можете изменить его на ContentControl и применить к нему анимацию.

<ControlTemplate TargetType="HyperlinkButton"> 
    <Grid x:Name="ButtonGrid" Cursor="{TemplateBinding Cursor}"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="CommonStates"> 
     <VisualState x:Name="Normal"/> 
     <VisualState x:Name="MouseOver"> 
      <Storyboard> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="FontWeight" Duration="0"> 
       <DiscreteObjectKeyFrame KeyTime="0" Value="Bold" /> 
      </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
    ... 
    <ContentControl x:Name="ContentPresenter" .../> 
</ControlTemplate> 
+0

Большое спасибо - это сработало – oolol

Смежные вопросы