Mam stronę WPF. Strona ma pewną treść, ale ostatnim elementem potomnym układu głównego strony jest utworzona przeze mnie kontrola użytkownika. Wygląda to tak:WPF: Jak odwoływać się do innych elementów sterujących w ramach właściwości Właściwość wyzwalacza?
<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>
Domyślnie właściwość obiektu UserControlViewModel
IsOn
jest ustawiony na false
, czyli kontrola użytkownik nie jest widoczny. Zaimplementowałem pewną logikę, która zmienia tę właściwość na true
, a następnie kontrola użytkownika jest wyświetlana przed wszystkimi innymi komponentami, które są przyciemnione. To działa dobrze.
Teraz chcę utworzyć animację efektu zanikania, która przyciemnie komponenty, które znajdują się za kontrolą użytkownika, gdy staną się widoczne. Następnie chcę zrobić moją czerwoną granicę, w której zawartość będzie rozjaśniała się od lewej strony, więc ruch + zanikanie.
Najpierw zacznijmy od efektu zanikania. Napisałem ten styl do Border
które ma wykonać przyciemnianie elementów tła:
<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>
...
Ale jest problem: Nie mogę ustawić wiązania na spuście Property
, ponieważ nie jest to właściwość zależność. Potrzebuję sposobu, aby poinformować, że mój wyzwalacz wystrzelił, gdy grid
ma ustawioną właściwość Visibility
na Visible
. Proszę, pomóżcie i dziękuję!
Drugi problem polega na tym, że nie wiem, jak wykonać ruch czerwoną obwódką, więc potrzebuję pomocy w zakresie niektórych przekształceń skali, tak myślę ... Dzięki raz jeszcze!
To działa, to świetnie! – Boris
Działa tylko za pierwszym razem! CZEMU!? – Boris
@ Myermian: Nie jestem do końca pewien, co masz na myśli. Czy mógłbyś to wyjaśnić w kilku kolejnych zdaniach? Dzięki. – Boris