如何使用WPF(表达式Blend 4and C#)制作windows滑出窗口

如何使用WPF(表达式Blend 4and C#)制作windows滑出窗口,wpf,c#-4.0,expression-blend,Wpf,C# 4.0,Expression Blend,我试图找出如何连接窗口,以便使用主窗口左侧或右侧的小按钮滑出。我要做的是创建一个主窗体,并连接两个窗口。对于其中一个窗口,当用户按下主窗口上的按钮时,它会使窗口看起来滑出而不是弹出。这就是我的想法。然后用户更改一个值,主窗口将更新新信息。老实说,我已经完成了所有代码的编写,并且在VisualStudio2010(带有弹出窗口)的Windows窗体中实现了所有功能。但我认为制作一个更具吸引力的gui WPF是一条路,而且我喜欢学习它。如果你有任何论坛,教程或一般的答案,这将是伟大的 好吧,从视频来

我试图找出如何连接窗口,以便使用主窗口左侧或右侧的小按钮滑出。我要做的是创建一个主窗体,并连接两个窗口。对于其中一个窗口,当用户按下主窗口上的按钮时,它会使窗口看起来滑出而不是弹出。这就是我的想法。然后用户更改一个值,主窗口将更新新信息。老实说,我已经完成了所有代码的编写,并且在VisualStudio2010(带有弹出窗口)的Windows窗体中实现了所有功能。但我认为制作一个更具吸引力的gui WPF是一条路,而且我喜欢学习它。如果你有任何论坛,教程或一般的答案,这将是伟大的

好吧,从视频来看,你真的需要一个能打开的扩展器,而不是一个窗口。窗口是有边框的区域,顶部有标准按钮和标题栏

这可以通过具有两列的网格来完成。一个设置为自动宽度,一个设置为*宽度。在自动调整大小的一个中,您可以放置扩展内容,并在另一个中始终显示内容。 实现这一点的简单方法是:

Xaml 这决不是完全的方法,也不是最好的方法。不过,这是最简单的实现方法之一。更好的方法是使用ViewModel处理扩展区域的状态,并使用一些动画使其平滑过渡。如果您想要在该视频中完成滑动行为,动画就是它所在的位置。如果您使用的是混合,那么您就有了合适的动画工具

就我个人而言,我希望这个Windows ViewModel有一个属性(让我们称之为DrawerExpanded为Boolean),自定义扩展器将其IsExpanded属性绑定到该属性。然后,我将创建一个打开的动画,设置扩展器中内容的宽度,并创建一个关闭的动画,将宽度设置为0。此外,在每一个我可能会包括设置可见性和不透明度,使效果更好,而不是奇怪。所以让我们假设expand animation在.5秒时将宽度设置为350,在.5秒时将可见性设置为可见,然后在.5秒到.7秒时将不透明度从0设置为100。这样抽屉就会滑出,里面的内容会很快淡入视野


如果你想要一个这样的代码示例,你可能需要给我几分钟的时间。

好的,所以从视频来看,你真的想要一个打开的扩展器,而不是一个窗口。窗口是有边框的区域,顶部有标准按钮和标题栏

这可以通过具有两列的网格来完成。一个设置为自动宽度,一个设置为*宽度。在自动调整大小的一个中,您可以放置扩展内容,并在另一个中始终显示内容。 实现这一点的简单方法是:

Xaml 这决不是完全的方法,也不是最好的方法。不过,这是最简单的实现方法之一。更好的方法是使用ViewModel处理扩展区域的状态,并使用一些动画使其平滑过渡。如果您想要在该视频中完成滑动行为,动画就是它所在的位置。如果您使用的是混合,那么您就有了合适的动画工具

就我个人而言,我希望这个Windows ViewModel有一个属性(让我们称之为DrawerExpanded为Boolean),自定义扩展器将其IsExpanded属性绑定到该属性。然后,我将创建一个打开的动画,设置扩展器中内容的宽度,并创建一个关闭的动画,将宽度设置为0。此外,在每一个我可能会包括设置可见性和不透明度,使效果更好,而不是奇怪。所以让我们假设expand animation在.5秒时将宽度设置为350,在.5秒时将可见性设置为可见,然后在.5秒到.7秒时将不透明度从0设置为100。这样抽屉就会滑出,里面的内容会很快淡入视野


如果您想要一个这样的代码示例,您可能需要给我几分钟的时间。

我真的只需要简单/友好地在Expression Blend中创建视觉状态。基本上只有一个“in-state”和“out-state”,以及一个允许控件触发状态更改的
InteractionTrigger
。它非常棒而且非常友好

没有代码隐藏:)希望它能帮助你

作为奖励,您可以像在powerpoint中一样轻松添加过渡效果。xaml代码非常冗长,但使用Blend可以使用IDE以可视化方式管理添加的所有内容


您甚至可以使用
交互触发器
在其他控件的可见性状态之间切换,而不是编写
转换器
,等等。

我真的只需要在Expression Blend中简单/友好地创建
可视状态
。基本上只有一个“in-state”和“out-state”,以及一个允许控件触发状态更改的
InteractionTrigger
。它非常棒而且非常友好

没有代码隐藏:)希望它能帮助你

作为奖励,您可以像在powerpoint中一样轻松添加过渡效果。xaml代码非常冗长,但使用Blend可以使用IDE以可视化方式管理添加的所有内容

您甚至可以使用
交互触发器
在其他控件的可见性状态之间切换,而不是编写
转换器

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StackOverflow"
    x:Class="MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480">
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" MinWidth="7"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid x:Name="ExpandoGrid"/>
        <Button Content="..." Grid.Column="0" HorizontalAlignment="Right" Margin="0" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" Width="6" Height="40" Click="Button_Click"/>
        <Grid x:Name="OtherContentGrid" Grid.Column="1" HorizontalAlignment="Left" Height="100" Margin="-7,0,0,0" VerticalAlignment="Top" Width="100"/>
    </Grid>
</Window>
Imports System.Collections.ObjectModel
Class MainWindow

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub Button_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
        If Me.ExpandoGrid.Width = 7 Then Me.ExpandoGrid.Width = 200 Else Me.ExpandoGrid.Width = 7
    End Sub
End Class