У меня есть страница WPF. Страница имеет некоторый контент, но последний дочерний компонент корневого макета страницы - это пользовательский элемент управления, который я создал. Это выглядит следующим образом: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
. Пожалуйста, помогите и спасибо!
Вторая проблема заключается в том, что я не знаю, как сделать перемещение красной границы, поэтому мне нужна помощь и в некоторых преобразованиях масштаба, я думаю ... Спасибо еще раз!
Он работает, здорово! – Boris
Это работает только в первый раз! ЗАЧЕМ!? – Boris
@myermian: Я не совсем уверен, что вы имели в виду. Не могли бы вы объяснить это еще в нескольких предложениях? Благодарю. – Boris