2009-11-03 12 views
0

Fondamentalement, j'ai un bouton pour lequel j'ai construit un modèle de contrôle. Il travaille actuellement, mais VS 2010 se plaint de la ligne de code suivante dans mon modèle de contrôleL'utilisation de {TemplateBinding Content} withTextBlock dans ControlTemplate

<TextBlock Text="{TemplateBinding Content}" 
    Foreground="{TemplateBinding Foreground}" 
    x:Name="cContentTextBlock" /> 

Le modèle de contrôle est un bouton et moi avons une variété de VisualStates qui ciblent ce TextBlock.

Je peux voir pourquoi VS2010 se plaint ... Que faire si le contenu n'est pas réellement du texte? Cela causerait des problèmes. Pour moi, le gros problème est que je veux définir le premier plan du texte en réponse aux changements d'état visuel.

Des idées sur la façon dont je pourrais accomplir cela? (Essayez, ça marche ... mais le concepteur VS2010 selfs sur elle)

Ce qui suit est le style entier:

<Style x:Key="PassiveLinkButton" TargetType="Button"> 
    <Setter Property="Cursor" Value="Hand" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Grid> 
        <vsm:VisualStateManager.VisualStateGroups> 
         <vsm:VisualStateGroup x:Name="CommonStates"> 
          <vsm:VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="cMouseOverBorder" Storyboard.TargetProperty="BorderBrush"> 
             <DiscreteObjectKeyFrame KeyTime="0"> 
              <DiscreteObjectKeyFrame.Value> 
               <SolidColorBrush Color="Black" /> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </vsm:VisualState> 
          <vsm:VisualState x:Name="Normal"/> 
          <vsm:VisualState x:Name="Pressed"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="cMouseOverBorder" Storyboard.TargetProperty="BorderBrush"> 
             <DiscreteObjectKeyFrame KeyTime="0"> 
              <DiscreteObjectKeyFrame.Value> 
               <SolidColorBrush Color="Blue" /> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="cContentTextBlock" Storyboard.TargetProperty="Foreground"> 
             <DiscreteObjectKeyFrame KeyTime="0"> 
              <DiscreteObjectKeyFrame.Value> 
               <SolidColorBrush Color="Blue" /> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </vsm:VisualState> 
          <vsm:VisualState x:Name="Disabled"/> 
         </vsm:VisualStateGroup> 
        </vsm:VisualStateManager.VisualStateGroups> 
        <Border x:Name="cFocusBorder" 
           BorderThickness="1" 
           BorderBrush="{StaticResource BorderBrush}" 
           Margin="2"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <Border x:Name="cMouseOverBorder" 
           BorderBrush="Transparent" BorderThickness="0,0,0,1" Margin="0 0 0 2"> 
           <StackPanel HorizontalAlignment="Left"> 
            <TextBlock Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" 
               x:Name="cContentTextBlock" Margin="2 2 2 0" 
               HorizontalAlignment="Center" /> 
           </StackPanel> 
          </Border> 
         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 

    </Setter> 
</Style> 

qui serait utilisé comme:

<Button Content="Press Me" Style={StaticResource PassiveButtonLink}" /> 

Répondre

0

Je voudrais lisez cette documentation MSDN si vous ne l'avez pas déjà fait:

Procédure pas à pas: personnalisation de l'apparence d'un bouton à l'aide d'un ControlTemplate http://msdn.microsoft.com/en-us/library/cc903963(VS.95).aspx

et si vous avez besoin d'aller plus loin que cela:

Personnaliser l'apparence d'un contrôle existant à l'aide d'un ControlTemplate http://msdn.microsoft.com/en-us/library/cc189093(VS.95).aspx

Création d'un nouveau contrôle en créant un ControlTemplate
http://msdn.microsoft.com/en-us/library/cc278064(VS.95).aspx

0

J'avais un problème similaire. La solution pour moi était de changer mon espace de noms XML par défaut.

Les travaux suivants dans ma copie de VS2008, mais pas dans VS2010:

xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation" 

Les travaux suivants deux VS2008 et VS2010:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

Par "œuvres", Je veux dire que le concepteur WPF reconnaît l'élément TemplateBinding.