Bonjour,
J'ai définit un style de bouton dans un ResourceDictionary, et je cherche a l'appliquer sur plusieurs boutons.
Voici mon style en court:
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style x:Key="LightButton" TargetType="{x:Type Button}"> . . . <Setter Property="Content"> <Setter.Value> <Image Source="{DynamicResource ResourceKey=ImgSrc}" Height="{DynamicResource ResourceKey=ImgH}" Width="{DynamicResource ResourceKey=ImgW}"/> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border x:Name="LightButtonBorder" Background="Transparent" BorderBrush="Black" RenderTransformOrigin="0.5,0.5"> . . . </Border> <ControlTemplate.Triggers> . . . </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>
Et voila ma fenetre:
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <Window x:Class="WPFTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="478" Width="697" AllowsTransparency="True" WindowStyle="None" Background="#00000000" ResizeMode="CanMinimize"> <Border CornerRadius="30" Background="#FF2E2E2E"> <Grid> <Button Name="button1" Style="{DynamicResource LightButton}"> <Button.Resources> <ImageSource x:Key="ImgSrc">/WPFTest;component/mini.png</ImageSource> <Color x:Key="ShadowColor">Blue</Color> <sys:Double x:Key="ImgH">16</sys:Double> <sys:Double x:Key="ImgW">16</sys:Double> </Button.Resources> </Button> <Button Name="button2" Style="{DynamicResource LightButton}"> <Button.Resources> <ImageSource x:Key="ImgSrc">/WPFTest;component/close.png</ImageSource> <Color x:Key="ShadowColor">Blue</Color> <sys:Double x:Key="ImgH">16</sys:Double> <sys:Double x:Key="ImgW">16</sys:Double> </Button.Resources> </Button> </Grid> </Border> </Window>
Alors avec un seul bouton, tout marche parfaitement. Même avec 2, lorsque des propriétés sont redéfinies.
Mais lorsque je veux avoir deux boutons avec le style de base, à l'éxécution, j'ai cette exception qui est levée:
Alors en googlant, j'ai cru comprendre que ça venait du fait que mon style était "appliqué" deux fois: lors du <Style x:Key="LightButton" TargetType="{x:Type Button}"> et lors du <Button Style="{DynamicResource LightButton}"> et qu'il fallait:'La propriété Set 'System.Windows.FrameworkElement.Style' a levé une exception.'
InnerException: L'élément spécifié est déjà l'enfant logique d'un autre élément. Déconnectez-le d'abord.
- Soit que je n'utilise pas le TargetType dans le style (ce qui n'est pas possible,car j'ai des setters et des triggers qui se rapportent directement aux propriétés d'un bouton)
- Soit que je n'appelle pas le style avec Style="{DynamicResource LightButton}", mais lorsque je fait ça, mon style n'est appliqué nul part :/
De plus, si je n'ai qu'un bouton, ou si des propriétés sont redéfinies sur mon 2ème bouton, tout marche nickel ...
Du coup je ne sais pas trop quoi faire, et comme je débute en WPF et que j'expérimente, je n'arrive vraiment pas à situer le problème, ou ce qu'il faudrait faire pour y remédier
Merci pout toute l'aide que vous pourrez m'apporter![]()
Partager