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}" />