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

2457

被折叠的 条评论
为什么被折叠?



