J'ai récemment joué avec WPF et j'ai rencontré un certain nombre de problèmes que je ne peux pas résoudre. J'ai le code suivant dans mon generic.xaml:WPF Binding & Converters
<Style TargetType="{x:Type local:ClearButton}">
<Style.Resources>
<con:ValueConverter x:Key="converter" />
</Style.Resources>
<Setter Property="Width" Value="20" />
<Setter Property="Height" Value="20" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ClearButton}">
<Grid>
<Image Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/WPF-Libraries;component/Resources/ClearEnabled.png" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BitmapEffect">
<Setter.Value>
<OuterGlowBitmapEffect Opacity="0.5" GlowColor="Red" GlowSize="3" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Source"
Value="/WPF-Libraries;component/Resources/ClearDisabled.png" />
</Trigger>
<!--Binding #1-->
<Trigger Property="{TemplateBinding local:ClearButton.IsPressed}" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<!--Binding #2-->
<ScaleTransform CenterX="CONVERTER BINDING:PASS WIDTH TO CONVERTER" CenterY="CONVERTER BINDING:PASS HEIGHT TO CONVERTER" ScaleX="0.75" ScaleY="0.75" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Je ne peux pas obtenir la liaison # 1 au travail. Je veux lier le déclencheur à la propriété IsPressed du bouton, quelle devrait être la liaison? Aussi quelle devrait être la liaison pour la reliure # 2 si je veux passer la largeur et la hauteur du bouton au convertisseur?
Aussi je pourrait déclencher le mécanisme de cette façon à la place:
<Style TargetType="{x:Type local:ClearButton}">
<Style.Resources>
<con:ValueConverter x:Key="converter" />
</Style.Resources>
<Setter Property="Width" Value="20" />
<Setter Property="Height" Value="20" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ClearButton}">
<!--Abbreviated-->
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!--Binding #1-->
<Trigger Property="{TemplateBinding local:ClearButton.IsPressed}" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<!--Binding #2-->
<ScaleTransform CenterX="CONVERTER BINDING" CenterY="CONVERTER BINDING" ScaleX="0.75" ScaleY="0.75" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
Quelle est la meilleure et ce serait la liaison être pour la liaison # 1 et # 2?
La propriété Property du déclencheur? – Austin
Désolé pour le double post, j'ai rencontré un autre problème. Après avoir essayé votre approche, il détecte maintenant quand l'utilisateur appuie sur le bouton mais pour une raison quelconque, le convertisseur ne fonctionne pas. Voici le code: http://snippets.symfony-project.org/snippet/381 Le CenterX et CenterY semblent être égal à 0. Je suppose que c'est un problème avec la liaison. – Austin
Lorsque vous utilisez une liaison sans spécifier de source, la valeur par défaut est le DataContext de l'objet contenant la liaison. Vous souhaitez probablement faire référence à la largeur du bouton, mais le bouton n'est pas son propre contexte de données. Pour pouvoir faire référence à l'objet bouton, ajoutez ce qui suit à votre liaison 'RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = Button}' –