У меня есть страница WPF. Страница имеет некоторое содержимое, но последний дочерний компонент корневого макета страницы - это созданный мной пользовательский элемент управления. Это выглядит так:
<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>
По умолчанию свойство IsOn
объекта UserControlViewModel
установлено на false
, т. Е. Пользовательский элемент управления не отображается. Я реализовал некоторую логику, которая изменяет это свойство на true
, а затем пользовательский элемент управления отображается перед всеми другими компонентами, которые затемнены. Это хорошо работает.
Теперь я хочу создать анимацию с эффектом затухания, которая затемнит компоненты, которые находятся за пользовательским элементом управления, как только он станет видимым. Затем я хочу, чтобы моя красная рамка, содержащая контент, постепенно исчезала с левой стороны, поэтому двигайте + исчезать.
Давайте начнем с эффекта затухания в первую очередь. Я написал этот стиль для Border
, который должен делать затемнение фоновых компонентов:
<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>
...
Но есть проблема: я не могу установить привязку к триггеру Property
, потому что это не свойство зависимости. Мне нужен способ, чтобы мой триггер срабатывал, когда grid
установило для свойства Visibility
значение Visible
. Пожалуйста, помогите и спасибо!
Вторая проблема в том, что я не знаю, как сделать перемещение красной границы, поэтому мне нужна помощь и в некоторых масштабных преобразованиях, я думаю ... Спасибо еще раз!