我有一个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>
Run Code Online (Sandbox Code Playgroud)
默认情况下,对象的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>
...
Run Code Online (Sandbox Code Playgroud)
但问题是:我无法在触发器上设置绑定Property
,因为它不是依赖属性.一旦设置grid
了Visibility
属性,我需要一种方法来告诉我的触发器Visible
.请帮助,谢谢!
第二个问题是,我不知道如何移动红色边框,所以我需要帮助一些规模转换,我猜...再次感谢!
m-y*_*m-y 16
尝试替换以下行:
原版的:
<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible">
Run Code Online (Sandbox Code Playgroud)
替换:
<DataTrigger Binding={Binding Visibility, ElementName=grid} Value="Visibile">
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14825 次 |
最近记录: |