WPF弹出层的解决方法

本文介绍了在WPF项目中实现类似HTTP页面浮动层的方法。通过使用Canvas和Border控件,结合设置Panel.ZIndex、Canvas.Left和Canvas.Top属性,以及处理MouseDown和MouseMove事件来移动层的位置。示例代码展示了如何创建一个可移动的浮层,背景颜色、阴影效果以及内容布局。后台代码主要处理层的移动功能,使得在WPF中创建浮动层变得简单易行。

最近在做一个WPF的项目,需要一个类似http页中层效果 ,开始也没有头绪

在网上找到一些资料,但找到的资料不多,并且也说的不清楚,只知道层内容要放在Grid中,后来经过多方尝试,终于实现了。后来发现用我的这种方式实现,不一定要放在Grid中,可以放到任务容器控制中都可以做到浮层的效果来。

<Grid>
        <!-- Canvas
        Panel.ZIndex="15"  层显示优先级
        Width="Auto"    Height="Auto"  如果为固定值,层的left和top只能在这个范围内有效了,设置为Auto有效范围就是当前容器  -->
        <Canvas Panel.ZIndex="15" Width="Auto" Height="Auto"     >
            <!--
            Border的内容就是层的内容,主要是这几个属性要注意:  Canvas.Left="200" Canvas.Top="10"
            事件(MouseDown,MouseMove)用于移动层的位置
            -->
            <Border Background="Beige" Width="200"  Height="200"  MouseDown="Border_MouseDown_2" MouseMove="Border_MouseMove"
                    BorderThickness="1" BorderBrush="Black"  CornerRadius="5" Opacity=".6"  Canvas.Left="200" Canvas.Top="10" >
                <Border.Effect>
                    <DropShadowEffect BlurRadius="15"  ></DropShadowEffect>
                </Border.Effect>
                <StackPanel>
                    <Label>AAAAAAAAAAA</Label>
                    <Button>AAAAButton</Button>
                </StackPanel>
            </Border>
        </Canvas>

        <Border  Background="AntiqueWhite" Height="500">
        <StackPanel>
            <TextBox  Width="300" ></TextBox>
            <Button Content="Test......."></Button>

            <Label>AAAAAAAAAAAAAAAAAAAAAAAAAAA</Label>
            <TextBox    Width="300" Text="AAAAAAAAA"  ></TextBox>
        </StackPanel>
        </Border>
    </Grid>

后台代码:主要是对层的移动功能的实现(如果层不需要移动,则就不需要编写后台代码了)

Point _Begin;
        private void Border_MouseDown_2(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            Border border = sender as Border;
            _Begin = e.GetPosition(border);
        }
        private void Border_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (e.LeftButton != MouseButtonState.Pressed)
                return;
            Border border = sender as Border;

            Point end = e.GetPosition(border);
            double left = Canvas.GetLeft(border) + (end.X - _Begin.X);
            double top = Canvas.GetTop(border) + (end.Y - _Begin.Y);

            Canvas.SetLeft(border, left);
            Canvas.SetTop(border, top);
        }

其实用WPF实现层的效果非常容易,没有想象的那样难

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值