弹出窗口从右上角显示

时间:2018-03-22 06:34:07

标签: wpf animation popup

我在WPF中有一个应用程序,它使用弹出窗口向用户显示其他数据(在这种情况下是指向某些帮助的链接)。我把它放在我想要的位置;打开它的链接位于右上方,因此它在链接下方右对齐。不过我还想动画它基本上从弹出窗口的右上角飞出来。

我有这种工作,但这不是我想要的。通过设置宽度和水平偏移的动画,我能够让整个弹出窗口按照我想要的对角线方式进行。但是,内部的内容仍然基于其左上角的布局,因此当弹出窗口向左移动时,它会不断重绘弹出内容,就好像它也在移动一样。我想要的是弹出内容保持静态,弹出窗口的边缘在打开时“显示”内容(并在关闭时“覆盖”它)。这是弹出窗口的代码:

Neovim\share\nvim\runtime\plugin

有没有好办法呢?

1 个答案:

答案 0 :(得分:0)

在经历了多次令人沮丧的辛劳之后,我以完全不同的方式使用它。您可以使用不透明蒙版属性将渲染时控件的各个部分的不透明度设置为任何形状,在这种情况下,我只需要一个矩形。但是,由于直线矩形等不是依赖属性,因此无法为它们设置动画......

我最终要做的是在主要内容边框后面创建另一个边框并为其设置动画。然后使用该边框作为视觉效果,将主要遮罩的不透明蒙版设置为可视笔刷。不仅如此,它不会为边框外的东西设置不透明度,所以我必须有一个透明的外边框,然后是一个纯色的内部边框,然后你动画内部的边框......

以下是代码:

    <Grid x:Name="GdHelpContent" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,45,20,0">
        <Border x:Name="RectHelpClip" Background="Transparent">
            <Border Background="{StaticResource BrHelpBackground}" RenderTransformOrigin="1,0">
                <Border.RenderTransform>
                    <ScaleTransform ScaleX="0" ScaleY="0" />
                </Border.RenderTransform>
                <Border.Style>
                    <Style TargetType="Border">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsHelpOpen, RelativeSource={RelativeSource AncestorType={x:Type local:UC_ApplicationWindow}}}" Value="True">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Duration="0:0:0.25" To="1" 
                                                                                 Storyboard.TargetProperty="RenderTransform.ScaleX" />
                                            <DoubleAnimation Duration="0:0:0.25" To="1" 
                                                                                 Storyboard.TargetProperty="RenderTransform.ScaleY" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Duration="0:0:0.25" To="0" 
                                                                                 Storyboard.TargetProperty="RenderTransform.ScaleX" />
                                            <DoubleAnimation Duration="0:0:0.25" To="0" 
                                                                                 Storyboard.TargetProperty="RenderTransform.ScaleY" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.ExitActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </Border>
        <Border Style="{StaticResource StHelpPanel}">
            <Border.OpacityMask>
                <VisualBrush Visual="{Binding ElementName=RectHelpClip}" />
            </Border.OpacityMask>
            <ContentControl Margin="15" Content="{Binding HelpContent, RelativeSource={RelativeSource AncestorType={x:Type local:UC_ApplicationWindow}}}" />
        </Border>
    </Grid>

希望有人帮助......