WPF滑动面板

Har*_*dik 3 wpf wpf-controls

您好我刚开始使用WPF.我想制作一个控件,它应该像Blend菜单控件一样.让我详细说明我的需求.

在此输入图像描述

与在Image中一样,单击Assets,菜单会滑出,菜单的其他窗口也会缩小,并为新的滑动菜单留出空间.菜单应该驻留在那里,直到执行任何动作将其滑回.(就像我在相同位置放置一个按钮取消图像中的按钮(x)).

此外,我不需要将面板停靠到其他位置,就像我们使用Toolbox with VS on Blend一样.

我怎么能实现这个?

任何帮助都会有用.

谢谢预期.

Ram*_*min 6

我创建了一个窗口,向您展示如何实现目标.它在窗口的右上方有2个按钮,如果单击每个按钮,将展开红色或黑色边框.

<Window x:Class="WpfApplicationUpper.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:WpfApplicationUpper" Height="100" Width="200">

<Window.Resources>
    <ControlTemplate x:Key="VerticalExpander" TargetType="{x:Type Expander}">
        <Border Name="ContentBorder"
                Width="0">
            <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsExpanded"
                     Value="True">
                <Setter TargetName="ContentBorder"
                        Property="Width"
                        Value="Auto" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="20" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="1" Orientation="Vertical">
        <Button Name="B1" Content="T" Click="B1_Click"/>
        <Button Name="B2"
                Content="F" Click="B2_Click"/>
    </StackPanel>
    <DockPanel LastChildFill="True">
        <Grid DockPanel.Dock="Right">
            <Expander Name="MainExpander1"
                      Template="{StaticResource VerticalExpander}"
                      IsExpanded="False">
                <Border Background="Black"
                        Width="50">
                </Border>
            </Expander>
            <Expander Name="MainExpander2"
                      Template="{StaticResource VerticalExpander}"
                      IsExpanded="False"
                      DockPanel.Dock="Right">
                <Border Background="Red"
                        Width="50">
                </Border>
            </Expander>
        </Grid>
        <Border Name="NonSliding"
                Width="100"
                Height="50"
                Background="Green">

        </Border>
    </DockPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

并在代码后面:

    private void B1_Click(object sender, RoutedEventArgs e)
    {
            MainExpander1.IsExpanded = !MainExpander1.IsExpanded;
    }

    private void B2_Click(object sender, RoutedEventArgs e)
    {
        MainExpander2.IsExpanded = !MainExpander2.IsExpanded;
    }
Run Code Online (Sandbox Code Playgroud)

  • MainExpander1.IsExpanded =!MainExpander1.IsExpanded; (9认同)