Ho una pagina WPF. La pagina ha del contenuto, ma l'ultimo componente figlio del layout radice della pagina è un controllo utente che ho creato. Sembra che questo:WPF: come fare riferimento ad altri controlli all'interno della proprietà Property di trigger?
<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>
Per default, la proprietà dell'oggetto UserControlViewModel
IsOn
è impostato false
, cioè il controllo di utente non è visibile. Ho implementato una logica che modifica questa proprietà in true
e quindi il controllo utente viene visualizzato davanti a tutti gli altri componenti che risultano in grigio. Funziona bene
Ora, voglio creare un'animazione effetto dissolvenza che offusca i componenti dietro il controllo utente una volta che diventa visibile. Successivamente, voglio rendere il mio bordo rosso che tiene il contenuto in dissolvenza dal lato sinistro, in modo da spostare + dissolvenza.
Iniziamo prima con l'effetto di dissolvenza. Ho scritto questo stile al Border
che dovrebbe fare l'oscuramento dei componenti di fondo:
<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>
...
Ma c'è il problema: non riesco ad impostare il legame sul grilletto Property
, perché non è una proprietà di dipendenza. Ho bisogno di un modo per dire al mio innesco di sparare una volta che il grid
ha la proprietà impostata su Visible
. Si prega di aiutare e grazie!
Il secondo problema è che non so come spostare il bordo rosso, quindi ho bisogno di aiuto per alcune trasformazioni di scala, immagino ... Grazie ancora!
Funziona, grande! – Boris
Funziona solo la prima volta! PERCHÉ!? – Boris
@myermian: non sono abbastanza sicuro di cosa intendessi. Potresti spiegarlo in poche altre frasi per favore? Grazie. – Boris