首页 > 其他分享 >解决WPF弹出子窗体如何设置停靠在主窗体的边缘

解决WPF弹出子窗体如何设置停靠在主窗体的边缘

时间:2024-12-27 09:58:33浏览次数:7  
标签:tickCount private timerClose 窗体 Owner WPF 出子 public

窗体代码

思路获取主窗体的位置坐标,根据主窗体的位置坐标和长宽尺寸计算子窗体的实际位置,并赋值给子窗体的Top和Left属性。

public partial class PromptDialogBox : Window
{ 
    /// <summary>
   ///     关闭计时器
   /// </summary>
    private DispatcherTimer _timerClose;
    private int _waitTime = 2;

    /// <summary>
    ///     计数
    /// </summary>
    private int _tickCount;
    public PromptDialogBox()
    {
        InitializeComponent();
        StartTimer();
    }

    public void PrompShow()
    {
        this.Owner = ApplicationInfo.ParentWindow;
        this.Top=Owner.Top;
        this.Left=Owner.Left+ Owner.ActualWidth-this.Width;
        this.Show();
    }
    /// <summary>
    ///     开始计时器
    /// </summary>
    private void StartTimer()
    {
        _timerClose = new DispatcherTimer
        {
            Interval = TimeSpan.FromSeconds(1)
        };
        _timerClose.Tick += delegate
        {
            if (IsMouseOver)
            {
                _tickCount = 0;
                return;
            }

            _tickCount++;
            if (_tickCount >= _waitTime)
            {
                this.Close();
            }
        };
        _timerClose.Start();
    }
}

然而按照以上方式设置,并没有达到理想效果,子窗体的位置看着没有什么规律。

网上找了资料(通过设置WindowStartupLocation.Manual),这样我们可以自由设置它的位置。

于是在上面构造函数中加入一行

 public PromptDialogBox()
 {
     InitializeComponent();
     this.WindowStartupLocation = WindowStartupLocation.Manual;
     StartTimer();
 }

果然达到相要的效果了。

标签:tickCount,private,timerClose,窗体,Owner,WPF,出子,public
From: https://www.cnblogs.com/follow-discoverer/p/18634779

相关文章

  • C# WPF PrintDialog 打印(3)
    前面https://www.cnblogs.com/yinyu5/p/18634080使用PrintDocument方法打印了Canvas,这里打印下面的DataGrid列表内容:这里DataGrid的数据源是DataTable,后台代码:1privatevoidPrintDocument_DataTable_Method(stringTitle,DataTabledataTable)2{3......
  • C# WPF PrintDialog 打印(2)
    前面https://www.cnblogs.com/yinyu5/p/18633910使用PrintVisual方法只打印了可见部分的元素,所以这里改为使用PrintDocument方法来进行打印。需要引用System.Printing.dll界面代码:1<Windowx:Class="WpfApp123.MainWindow"2xmlns="http://schemas.microsoft.com......
  • C# WPF PrintDialog 打印(1)
    参考“WPF打印实例”的文章:https://www.cnblogs.com/gnielee/archive/2010/07/02/wpf-print-sample.html测试程序: 首先打印Canvas效果: 看起来似乎没问题,但是调整窗体尺寸遮挡部分元素:再打印Canvas效果: 可以发现PrintVisual方法只打印了可见部分的元素,测试打印DataG......
  • WPF TabControl 去掉鼠标悬浮效果
     1.资源<Window.Resources><Stylex:Key="TabStyle"TargetType="TabItem"><SetterProperty="TextBlock.FontSize"Value="12"/><SetterProperty="Template">......
  • WPF 构建属性结构
    在WPF中构建树形结构首先构建一个属性结构的类,在这个类中,其中NodeId、NodeName、ParentId是最重要的3个属性,是构建树形结构的关键.另外一个比较重要的属性就是ChildNodes,它是一个树形集合类对象,该属性存储子树,是构建树形结构的必要条件。其他都是附加属性,如Icon用于存储图标......
  • WPF TileMode ViewPort ImageBrush VisualBrush
    <Windowx:Class="WpfApp98.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • WPF应用启动时,检测触摸失效的几种方式
    在开发OPS项目,发现插拔式的OPS在切换系统、开关机、重启,会时不时出现部分WPF开机自启的应用触摸失效的问题。而且出现问题的应用都是全屏窗口应用。用snoop附加上去,没有Touch和Styulus的的相关事件,但是鼠标事件是能触发的,而且系统的其他的应用软件都可以触摸。这就是我们常见......
  • WPF LogicalTree VisualTree
    <Windowx:Class="WpfApp94.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • WPF LinearGradientBrush SpreadMethod,Pad,Reflect,Repeat
    <Windowx:Class="WpfApp91.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......