Meilleur auteur de réponses
Datatrigger sur label qui ne fonctionne pas avec les labels inclus dans un UserControl

Question
-
Bonjour
J'ai créer un datatrigger pour modifier dynamiquement le look des labels. Mais ce datatrigger fonction bien lorsque mon label est inséré directement dans une fenêtre, mais ne fonctionne plus lorsque le label est inclu dans un UserControl. Voici le source de mon exemple.
<Application x:Class="WpfApplication1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> <Application.Resources> <Style x:Key="StyleEtoile"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=frm , Path=IsModification}" Value="true" > <Setter Property="Label.FontWeight" Value="Bold"/> <Setter Property="Label.Foreground" Value="Red"/> </DataTrigger> </Style.Triggers> </Style> </Application.Resources> </Application>
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" x:Name="frm" xmlns:my="clr-namespace:WpfApplication1"> <Grid> <Label Content="coucou" Margin="0,0,0,0" Style="{StaticResource StyleEtoile}" VerticalAlignment="Top"/> <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="150,163,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> <my:LabelEtoilee Margin="100,100,0,0" x:Name="labelEtoilee1" VerticalAlignment="Top" /> </Grid> </Window>
using System; using System.Windows; namespace WpfApplication1 { /// <summary> /// Logique d'interaction pour MainWindow.xaml /// </summary> public partial class MainWindow : Window { public Boolean IsModification { get { return (Boolean)GetValue(IsModificationProperty); } set { SetValue(IsModificationProperty, value); } } public static readonly DependencyProperty IsModificationProperty = DependencyProperty.RegisterAttached( "IsModification", typeof(Boolean), typeof(MainWindow), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender) ); public MainWindow() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { IsModification = !IsModification; } } }
<UserControl x:Class="WpfApplication1.LabelEtoilee" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="34" d:DesignWidth="300"> <TextBlock> <Label Content="Label" Height="Auto" Name="label1" Style="{StaticResource StyleEtoile}" /> </TextBlock> </UserControl>
Quelqu'un a t-il une idée pour solutionner mon problème ? Merci d'avance pour votre aide
TEDFR- Modifié TEDFR vendredi 30 septembre 2011 14:11
Réponses
-
Dans ce cas utilise cela (sans l'ElementName donc...):
<DataTrigger Binding="{Binding Path=IsModification,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window }}}" Value="true" >
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com- Proposé comme réponse JonathanANTOINEMVP, Moderator lundi 3 octobre 2011 13:50
- Marqué comme réponse TEDFR lundi 3 octobre 2011 14:16
Toutes les réponses
-
Hello,
Y-a-t'il des messages d'erreurs dans la fenêtre de sortie ?
Est-ce que ton UserControl défini la proprieté IsModification ?
Bon courage,
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com
- Modifié JonathanANTOINEMVP, Moderator lundi 3 octobre 2011 08:26
-
-
Bonjour,
Je pense savoir ce qui se passe. Ton style va rechercher la propriété sur ton UserControl qui ne la défini pas. Essaye de remplacer la définition par cette ligne.
<DataTrigger Binding="{Binding ElementName=frm , Path=IsModification,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window }}}" Value="true" >
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com -
-
-
-
Dans ce cas utilise cela (sans l'ElementName donc...):
<DataTrigger Binding="{Binding Path=IsModification,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window }}}" Value="true" >
Jonathan ANTOINE - Découvrez mon livre sur MVVM: http://goo.gl/N6Tmn - http://www.jonathanantoine.com- Proposé comme réponse JonathanANTOINEMVP, Moderator lundi 3 octobre 2011 13:50
- Marqué comme réponse TEDFR lundi 3 octobre 2011 14:16
-