рд╕реА # рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдПрдирд╛рд▓реЙрдЧ рд╡рд┐рдВрдбреЛредрд╢рд┐рд╡рд┐рдпрд▓реЙрдЧ () рдпрд╛ рдбрд┐рд╕реНрдкреИрдЪрд░рдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рд╕реМрджрд╛

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:


  1. рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ
  3. рд╡рд┐рдзрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЙрд╕реА рд╕реНрдерд╛рди рд╕реЗ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИ

рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛: рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдВрдбреЛ рди рдмрдирд╛рдПрдВред


рдпрд╣ рд╕рд░рд▓ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред


рдирд┐рд░реНрдгрдп


рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╕рд░реНрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреА рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдореИрдВ ShowDialog рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдПрдХ рд▓реЗрдЦ рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдерд╛ред рд▓реЗрдЦрдХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ WPF рдореЗрдВ ShowDialog рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП!


рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ ShowDialog рдкрджреНрдзрддрд┐ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛


[DllImport("user32")] internal static extern bool EnableWindow(IntPtr hwnd, bool bEnable); public void ShowModal() { IntPtr handle = (new WindowInteropHelper(Application.Current.MainWindow)).Handle; EnableWindow(handle, false); DispatcherFrame frame = new DispatcherFrame(); this.Closed += delegate { EnableWindow(handle, true); frame.Continue = false; }; Show(); Dispatcher.PushFrame(frame); } 

рдореБрдЭреЗ рд╡рд┐рдВрдбреЛ рд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╕рд╣реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ...


  public string GetInput() { var frame = new DispatcherFrame(); ButtonClicked += () => { frame.Continue = false; }; Dispatcher.PushFrame(frame); return Text; } 

Dispatcher.PushFrame(frame) GetInput() рд╡рд┐рдзрд┐ рдХреЛ Dispatcher.PushFrame(frame) рд╕реЗ GetInput() рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред GetInput() frame.Continue false рд╣реЛ рдЬрд╛рддреА false ред рдЬрдм рдПрдХ рдирдпрд╛ рдлреНрд░реЗрдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рд▓реВрдк рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд▓реВрдк рд╕рд┐рд╕реНрдЯрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдмрд┐рдВрджреБ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИред рдЬрдм рд╣рдо рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ (рдлреНрд░реЗрдоред рдмрдВрдж frame.Continue = false ), рдореБрдЦреНрдп рд▓реВрдк рдЙрд╕реА рд╕реНрдерд╛рди рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред


рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред


рдореЗрдирд╡рд┐рдВрдбреЛ рдореЗрдВ, рдПрдХ рдмрдЯрди рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдбрд╛рд▓реЗрдВ рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред


рд╣реИрдВрдбрд▓рд░ рдХреЛрдб:


  public RelayCommand ButtonClick => new RelayCommand(() => { Task.Factory.StartNew(() => { //   Thread.Sleep(1000); //  -  var control = new PopupControlModel(); //  ,      Result = control.GetInput(); //    Thread.Sleep(2000); }); }); } 

рдореИрдВрдиреЗ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреИрдкреНрдЪрд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрд╡реЗрджрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


! рдирдореВрдирд╛ рдХреЛрдб рдореЗрдВ mvvm рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬреЛрд░ рд╕реЗ рдордд рдорд╛рд░реЛ рд▓рд╛рдкрддрд╛ рдбрд┐рдЬрд╛рдЗрди


рдЧрд┐рддреБрдм рд╕реНрд░реЛрдд рдХреЛрдб: рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг


рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


рд▓реЗрдЦ "рдХрд╕реНрдЯрдо ShowDialog"
рдорд╢реАрди рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реНрдкреИрдЪрд░рдлреНрд░реЗрдо рд╡рд░реНрдЧ рдХрд╛ рдбрд░рд╛рд╡рдирд╛ рд╡рд┐рд╡рд░рдг
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджреА рдЧрдИ рд╣реИ ред

Source: https://habr.com/ru/post/hi452268/


All Articles