Je travaille avec cette réponse à cette question sur les boutons de liaison:
https://stackoverflow.com/a/ 3564706/945 p>
Le problème est que le style de souligne TextDecoration n'est appliqué que sur des blocs de texte autogéné. P>
<Style x:Key="LinkButton" TargetType="Button" BasedOn="{StaticResource ResourceKey={x:Type Button}}" > <Setter Property="Width" Value="Auto"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" VerticalAlignment="Center" > <ContentPresenter.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextDecorations" Value="Underline" /> </Style> </ContentPresenter.Resources> </ContentPresenter> </ControlTemplate> </Setter.Value> </Setter> </Style>
3 Réponses :
Je crois que lorsque vous mettez un élément de cadre dans un contenuControl, le modèle n'est pas appliqué. Si vous déclarez également votre style TextBlock en tant que ressource de bouton, cela fonctionne dans les deux cas.
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:local="clr-namespace:WpfApplication1" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="525" Height="350" mc:Ignorable="d"> <Window.Resources> <Style x:Key="LinkButton" BasedOn="{StaticResource ResourceKey={x:Type Button}}" TargetType="Button"> <Setter Property="Width" Value="Auto" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <ContentPresenter VerticalAlignment="Center" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" > <ContentPresenter.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextDecorations" Value="Underline" /> </Style> </ContentPresenter.Resources> </ContentPresenter> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Window.DataContext> <local:ViewModel /> </Window.DataContext> <Grid x:Name="LayoutRoot"> <StackPanel> <Button Style="{StaticResource LinkButton}">Text</Button> <Button Style="{StaticResource LinkButton}"> <Button.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextDecorations" Value="Underline" /> </Style> </Button.Resources> <TextBlock Text="Text" /> </Button> </StackPanel> </Grid> </Window>
Mais tout le point est de définir une seule fois de style "linkbutton" une fois. Ne pas appliquer un style personnalisé sur chaque bouton de liaison de l'application
Vous pouvez définir le style complet dans vos ressources de contrôle (ou choisir le style dans les ressources du bouton comme principal) et définissez le style dans le contenuPresenter comme un espace réservé basé sur le principal.
J'ai rencontré des problèmes similaires hier. Vous pouvez déplacer des setters de style pour le bloc de texte, hors du nœud de modèle, de sorte que vos styles n'effaceront pas après avoir changé de contenu de contrôle. p>
Le problème est que vous définissez x: clé = "linkbutton" code>. Les styles implicites ne fonctionneront pas si vous définissez la clé. Retirez la clé et il sera appliqué à tous les boutons p>
Pourquoi mettez-vous un textblock à l'intérieur d'un bouton? La classe de boutons possède son propre champ intégré «Contenu» qui formatera et échoué bien, vous pouvez également modifier la façon dont il se blendra si facilement.
code>