WPF: Comment faire référence à d'autres contrôles à l'intérieur de déclenchement de Propriété?
J'ai un WPF page. La Page a un peu de contenu, mais le dernier enfant de la composante de la page racine de la mise en page est un contrôle utilisateur que j'ai créé. Il ressemble à ceci:
<UserControl DataContext=UserControlViewModel>
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="visibilityConverter" />
</UserControl.Resources>
<Grid
Name="grid"
Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}">
<!-- Border to dim everything behind my user control -->
<Border Background="#000000" Opacity="0.4" />
<!-- The following border is red and holds the content -->
<Border
Width="{Binding ElementName=txt, Path=ActualWidth}"
Height="{Binding ElementName=txt, Path=ActualHeight}"
Margin="{Binding ElementName=txt, Path=Margin}"
HorizontalAlignment="{Binding ElementName=txt, Path=HorizontalAlignment}"
VerticalAlignment="{Binding ElementName=txt, Path=VerticalAlignment}"
Background="Red">
<TextBlock
Name="txt"
Width="200"
Height="100"
Margin="20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="This is my super awesome message!" />
</Border>
</Grid>
</UserControl>
Par défaut, le IsOn
propriété de la UserControlViewModel
objet est défini à false
, c'est à dire le contrôle de l'utilisateur n'est pas visible. J'ai mis en œuvre une certaine logique que les changements de cette propriété true
puis le contrôle de l'utilisateur est affiché en face de tous les autres composants qui sont grisés. Cela fonctionne bien.
Maintenant, je veux créer un effet de fondu d'animation qui aurait dim les composants qui sont derrière le contrôle de l'utilisateur une fois qu'il devient visible. Ensuite, je veux faire de ma bordure rouge qui renferme le contenu d'un fondu à partir de la gauche, donc le déplacement + fondu.
Commençons par l'effet de fondu en premier. J'ai écrit ce style à la Border
qui est censé faire la gradation de fond composants:
<UserControl DataContext=UserControlViewModel>
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="visibilityConverter" />
</UserControl.Resources>
<Grid
Name="grid"
Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}">
<!-- Border to dim everything behind my user control -->
<Border Background="#000000" Opacity="0.4">
<!-- The following style is new code -->
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="0.0"
To="0.4"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
...
Mais il y a le problème: je ne peux pas définir la liaison sur le déclencheur Property
, car il n'est pas une propriété de dépendance. J'ai besoin d'un moyen de dire à mon déclencheur une fois le grid
a obtenu le Visibility
propriété définie à Visible
. S'il vous plaît aider et je vous remercie!
Deuxième problème est, je ne sais pas comment faire le déplacement de la bordure rouge, j'ai donc besoin de l'aide autour de certains à l'échelle des transformations ainsi, je suppose... Merci encore une fois!
OriginalL'auteur Boris | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
essayez de remplacer la ligne suivante:
Original:
De remplacement:
Il ne fonctionne que la première fois! POURQUOI!?
Je ne suis pas tout à fait sûr de ce que vous avez voulu dire. Pourriez-vous expliquer en quelques phrases, s'il vous plaît? Merci.
En regardant ton code, je ne vois pas un Déclencheur.ExitActions. Je pense que vous avez besoin de sorte qu'il peut répéter.
J'ai ajouté DataTrigger.ExitActions. Il fonctionne désormais correctement. Mais il y a encore un problème. J'ai voulu créer une animation de fondu à l'intérieur de ExitActions, mais il ne fonctionne pas. Il vient de revient de l'opacité de l'original d'une valeur de 0. Mon animation retourne cette valeur, pendant plus d'une seconde à l'inverse à celui indiqué dans la question du corps). Où suis-je trompe?
OriginalL'auteur m-y