Изменение веса шрифта гиперссылки на MouseOver - PullRequest
1 голос
/ 15 февраля 2012

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

Что я делаю не так?

....
<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 ]

2 голосов
/ 15 февраля 2012

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

      <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 голос
/ 15 февраля 2012

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>
...