Utilizzo di Silverlight 4 & WPF 4, Sto tentando di creare uno stile di pulsante che modifichi il colore del testo di qualsiasi testo contenuto quando il pulsante viene spostato con il mouse. Dal momento che sto cercando di fare questo compatibile sia con Silverlight & WPF, sto usando il manager stato visivo:Nel modello di controllo di un pulsante, come posso impostare il colore del testo contenuto?
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="outerBorder" CornerRadius="4" BorderThickness="1" BorderBrush="#FF757679">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="#FFFEFEFE"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="contentPresenter"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Border x:Name="Background" CornerRadius="3" BorderThickness="1" BorderBrush="Transparent">
<Grid>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
</Border>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
Dal momento che questo è un modello per un pulsante regolare vecchi, so che non c'è Garantisco che c'è persino un blocco di testo all'interno di esso, e all'inizio non ero sicuro che fosse possibile. Curiosamente, il colore del testo fa cambiamento se il pulsante viene dichiarato come:
<Button Content="Hello, World!" />
ma non si cambiamento se il pulsante viene dichiarato come:
<Button>
<TextBlock Text="Hello, World!" /> <!-- Same result with <TextBlock>Hello, World </TextBlock> -->
</Button>
Anche se l'albero visuale (identico (Button -> ContentPresenter -> TextBlock), con l'avvertenza che il blocco di testo creato nella prima versione ha il suo contesto di dati impostato su "Ciao, Mondo", mentre il blocco di testo nella seconda versione ha semplicemente il suo set di proprietà del testo. Presumo che questo abbia qualcosa a che fare con l'ordine di creazione del controllo (la prima versione del pulsante crea TextBlock, nella seconda versione il blocco di testo potrebbe essere creato per primo? Davvero non sono sicuro su questo).
Nel corso della ricerca di questo, ho visto alcune soluzioni che funzionano in Silverlight (come la sostituzione del ContentPresenter con un ContentControl), ma che non funzionerà in WPF (il programma si blocca effettivamente).
Poiché questo è nel modello di controllo del pulsante e mi piacerebbe utilizzare il VSM se possibile, penso che anche escluda esplicitamente la modifica della proprietà in primo piano del pulsante (non so come accedo a questo da all'interno del modello?)
Apprezzerei molto qualsiasi aiuto, consiglio che qualcuno potrebbe dare.
Sono sorpreso che abbia funzionato a tutti visto che TextElement non ha nulla a che fare con TextBlock. – Denis