WPF: comment faire référence à d'autres contrôles dans la propriété de propriété de déclenchement?

j'ai une page WPF. Page a du contenu, mais le dernier composant enfant de la mise en page racine de page est un contrôle d'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 l' UserControlViewModel l'objet est défini à false, c'est à dire le contrôle de l'utilisateur n'est pas visible. J'ai implémenté une logique qui change cette propriété en true et alors le contrôle de l'utilisateur s'affiche devant tous les autres composants qui sont atténués. Cela fonctionne bien.

maintenant, je veux créer une animation d'effet de fondu qui diminuerait les composants qui sont derrière le contrôle de l'utilisateur une fois qu'il devient visible. Ensuite, je veux faire ma bordure rouge qui contient le contenu à fondu dans le côté gauche, donc se déplacer + fondu.

commençons par l'effet de fondu. J'ai écrit ce style à l' 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 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 l' grid a Visibility propriété définie à Visible. S'il vous plaît aider et je vous remercie!

le deuxième problème est, Je ne sais pas comment faire le déplacement de la frontière rouge, donc j'ai besoin d'aide autour de quelques transformations d'échelle aussi bien, je suppose... Merci encore une fois!

9
demandé sur Dave Clemmer 2011-04-14 21:56:22

1 réponses

essayez de remplacer la ligne suivante:

Origine:

<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible">

Remplacement:

<DataTrigger Binding={Binding Visibility, ElementName=grid} Value="Visibile">
16
répondu m-y 2011-04-14 18:38:18