wpf dual monitor


<Window x:Class="DualMonitors.Views.WinLeft"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DualMonitors.Views"
        mc:Ignorable="d" WindowState="Maximized"  WindowStartupLocation="CenterScreen" 
        Title="WinLeft" Height="300" Width="300">
    <Grid Background="Blue">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBlock Text="Left" FontSize="50" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <Button Grid.Row="2" Command="{Binding LeftCmd}" Content="Click Left" FontSize="50"/>
        </Grid>
       
    </Grid>
</Window>

<Window x:Class="DualMonitors.Views.WinRight"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DualMonitors.Views"
        mc:Ignorable="d" WindowState="Maximized" WindowStartupLocation="CenterScreen" 
        Title="WinRight">
    <Grid Background="Yellow">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBlock Text="Right" FontSize="50" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <Button Grid.Row="2" Command="{Binding RightCmd}" Content="Click Right" FontSize="50"/>
        </Grid>
    </Grid>
</Window>
using DualMonitors.ViewModel;
using System.Windows;

namespace DualMonitors.Views
{
    /// <summary>
    /// Interaction logic for WinRight.xaml
    /// </summary>
    public partial class WinRight : Window
    {
        public WinRight()
        {
            InitializeComponent();
            DualVM BDualVM = DualVM.GetDualVM();
            this.DataContext = BDualVM;
        }
    }
}
using Prism.Commands;
using System.Windows;

namespace DualMonitors.ViewModel
{
    public class DualVM
    {
        private static DualVM DualVMInstance;
        
        public static DualVM GetDualVM()
        {
            object objLock = new object();
            lock(objLock)
            {
                if(DualVMInstance==null)
                {
                    DualVMInstance = new DualVM();
                }
            }
            return DualVMInstance;
        }

        private DualVM()
        {
            //MessageBox.Show("Dual Monitor");
        }

        private DelegateCommand leftCmdValue;
        public DelegateCommand LeftCmd
        {
            get
            {
                if(leftCmdValue==null)
                {
                    leftCmdValue = new DelegateCommand(LeftCmdExecuted);
                }
                return leftCmdValue;
            }
        }

        private void LeftCmdExecuted()
        {
            MessageBox.Show("Left Monitor");
        }

        private DelegateCommand rightCmdValue;
        public DelegateCommand RightCmd
        {
            get
            {
                if(rightCmdValue==null)
                {
                    rightCmdValue = new DelegateCommand(RightCmdExecuted);
                }
                return rightCmdValue;
            }
        }

        private void RightCmdExecuted()
        {
            MessageBox.Show("Right Monitor");
        }
    }
}

 

public partial class App : System.Windows.Application
    {

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);           

            SetupWindows();
        }
         
        private void SetupWindows()
        {
            System.Windows.Forms.Screen mainScreen = Screen.AllScreens[0]; ;
            WinLeft leftWin = new WinLeft()
            {
                WindowStartupLocation = WindowStartupLocation.Manual,
                WindowState = System.Windows.WindowState.Normal,
                Left = mainScreen.WorkingArea.Left,
                Top = mainScreen.WorkingArea.Top,
                Width = mainScreen.WorkingArea.Width,
                Height = mainScreen.WorkingArea.Height
            };           

            System.Windows.Forms.Screen secondaryScreen = Screen.AllScreens[1];
            WinRight rightWin = new WinRight()
            {
                WindowStartupLocation = WindowStartupLocation.Manual,
                WindowState = System.Windows.WindowState.Normal,
                Left = secondaryScreen.WorkingArea.Left,
                Top = secondaryScreen.WorkingArea.Top,
                Width = secondaryScreen.WorkingArea.Width,
                Height = secondaryScreen.WorkingArea.Height
            };

           
            leftWin.Show();
            leftWin.WindowState = WindowState.Maximized;
            rightWin.Show();
            rightWin.WindowState = WindowState.Maximized;
            rightWin.Owner = leftWin;
        }
    }

 

posted @ 2019-10-08 10:08  Fred1987  阅读(...)  评论(... 编辑 收藏