制作可通过鼠标移动的形状窗口

时间:2011-12-30 07:04:22

标签: wpf wpf-controls expression-blend

我在Microsoft Expression Blend WPF中创建了一个表单。表单字段位于格式化的矩形上。我做的是隐藏原始窗口。现在每件事看起来都很完美,除非我运行应用程序时我无法使用鼠标移动表单。什么可以解决这个问题?

这是截图。

enter image description here

1 个答案:

答案 0 :(得分:1)

要达到此效果,请尝试以下操作。

在Window元素上:

  1. 将WindowStyle属性设置为None。
  2. 将背景设置为空。
  3. 将AllowTransparency设置为True。
  4. 将您的内容分组到Border元素中。对于这种工作,边框比矩形要好得多。在Border:

    上设置这些属性
    1. 具有5-10%Alpha通道的所需颜色的背景。
    2. BorderBrush到所需的颜色。 (您可能也可能不想设置此Alpha通道)
    3. BorderThickness到所需的厚度。
    4. 运行应用程序,您将大致处于OP状态。现在,要添加窗口拖动,在Window上捕获MouseDown事件,您需要做的就是调用DragMove()。

      以下是您应该能够运行的示例WPF应用程序:

      <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
          xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
          x:Class="ShapedWindow.MainWindow"
          x:Name="Window"
          Title="MainWindow"
          Width="640"
          Height="480"
          WindowStyle="None"
          Background="{x:Null}"
          AllowsTransparency="True"
          MouseDown="Window_MouseDown">
      <Border x:Name="LayoutRoot"
              BorderBrush="Black"
              CornerRadius="50"
              BorderThickness="2,2,3,3"
              Background="#18EF3B3B">
          <Grid>
              <Button x:Name="CloseButton"
                      Content="Close"
                      HorizontalAlignment="Right"
                      VerticalAlignment="Top"
                      Width="75"
                      Margin="0,19,26,0"
                      Click="CloseButton_Click" />
          </Grid>
      </Border>
      

      背后的代码:

      using System;
      using System.Collections.Generic;
      using System.Text;
      using System.Windows;
      using System.Windows.Controls;
      using System.Windows.Data;
      using System.Windows.Documents;
      using System.Windows.Input;
      using System.Windows.Media;
      using System.Windows.Media.Imaging;
      using System.Windows.Shapes;
      
      namespace ShapedWindow
      {
          /// <summary>
          /// Interaction logic for MainWindow.xaml
          /// </summary>
          public partial class MainWindow : Window
          {
              public MainWindow()
              {
                  this.InitializeComponent();
      
                  // Insert code required on object creation below this point.
              }
      
              private void CloseButton_Click(object sender, RoutedEventArgs e)
              {
                  this.Close();
              }
      
              private void Window_MouseDown(object sender, MouseButtonEventArgs e)
              {
                  DragMove();
              }
          }
      }