static void Main(string[] args) { //When choosing types for variables that are part of the DOM API, //You will want to use var when it's possible and dynamic when it's not. Console.WriteLine("Starting"); WindowsHost windowsHost = new WindowsHost( ); Window window = new Window( ); Panel panel = new Panel( ) { Margin = new Thickness(1), HorizontalAlignment = HorizontalAlignment.Stretch }; panel.XChildren.Add( new TextBlock( ) { Text = "Press the button", Margin = new Thickness(0, 0, 0, 1), HorizontalAlignment = HorizontalAlignment.Center }); Button button = new Button( ) { Caption = "Button", HorizontalAlignment = HorizontalAlignment.Center }; panel.XChildren.Add(button ); button.OnClick += ( sender, eventArgs ) => { MessageBox.Show( "Info", "Button pressed !", result => { } ); }; window.Content = panel; window.Title = "Hello, Web !"; windowsHost.Show( window ); runWindows( windowsHost ); // ConsoleApplication.Instance.Run( windowsHost ); }
private static void Main(string[] args) { // Control window = ConsoleApplication.LoadFromXaml( "ConsoleFramework.Layout.xml", null ); //// window.FindChildByName< TextBlock >( "text" ).MouseDown += ( sender, eventArgs ) => { //// window.FindChildByName< TextBlock >( "text" ).Text = "F"; //// eventArgs.Handled = true; //// }; //// window.MouseDown += ( sender, eventArgs ) => { //// window.Width = window.ActualWidth + 3; //// window.Invalidate( ); //// }; // ConsoleApplication.Instance.Run( window ); // return; var assembly = Assembly.GetExecutingAssembly(); var resourceName = "Examples.GridTest.xml"; Window createdFromXaml; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) using (StreamReader reader = new StreamReader(stream)) { string result = reader.ReadToEnd(); MyDataContext dataContext = new MyDataContext( ); dataContext.Str = "Введите заголовок"; createdFromXaml = XamlParser.CreateFromXaml<Window>(result, dataContext, new List<string>() { "clr-namespace:Xaml;assembly=Xaml", "clr-namespace:ConsoleFramework.Xaml;assembly=ConsoleFramework", "clr-namespace:ConsoleFramework.Controls;assembly=ConsoleFramework", }); } // ConsoleApplication.Instance.Run(createdFromXaml); // return; using (ConsoleApplication application = ConsoleApplication.Instance) { Panel panel = new Panel(); panel.Name = "panel1"; panel.HorizontalAlignment = HorizontalAlignment.Center; panel.VerticalAlignment = VerticalAlignment.Stretch; panel.XChildren.Add(new TextBlock() { Name = "label1", Text = "Label1", Margin = new Thickness(1,2,1,0) //,Visibility = Visibility.Collapsed }); panel.XChildren.Add(new TextBlock() { Name = "label2", Text = "Label2_____", HorizontalAlignment = HorizontalAlignment.Right }); TextBox textBox = new TextBox() { MaxWidth = 10, Margin = new Thickness(1), HorizontalAlignment = HorizontalAlignment.Center, Size = 15 }; Button button = new Button() { Name = "button1", Caption = "Button!", Margin = new Thickness(1), HorizontalAlignment = HorizontalAlignment.Center }; button.OnClick += (sender, eventArgs) => { Debug.WriteLine("Click"); MessageBox.Show( "Окно сообщения", "Внимание ! Тестовое сообщение", delegate( MessageBoxResult result ) { } ); Control label = panel.FindDirectChildByName("label1"); if (label.Visibility == Visibility.Visible) { label.Visibility = Visibility.Collapsed; } else if (label.Visibility == Visibility.Collapsed) { label.Visibility = Visibility.Hidden; } else { label.Visibility = Visibility.Visible; } label.Invalidate(); }; ComboBox comboBox = new ComboBox( ) { // Width = 14 //HorizontalAlignment = HorizontalAlignment.Stretch }; comboBox.Items.Add( "Сделать одно" ); comboBox.Items.Add("Сделать второе"); comboBox.Items.Add("Ничего не делать"); ListBox listbox = new ListBox( ); listbox.Items.Add( "First item" ); listbox.Items.Add( "second item1!!!!!!1fff" ); listbox.HorizontalAlignment = HorizontalAlignment.Stretch; //listbox.Width = 10; panel.XChildren.Add(comboBox); panel.XChildren.Add(button); panel.XChildren.Add(textBox); panel.XChildren.Add(listbox); //application.Run(panel); WindowsHost windowsHost = new WindowsHost() { Name = "WindowsHost" }; Window window1 = new Window { X = 5, Y = 4, //MinHeight = 100, //MaxWidth = 30, //Width = 10, Height = 20, Name = "Window1", Title = "Window1", Content = panel }; GroupBox groupBox = new GroupBox( ); groupBox.Title = "Группа"; ScrollViewer scrollViewer = new ScrollViewer( ); ListBox listBox = new ListBox( ); listBox.Items.Add( "Длинный элемент" ); listBox.Items.Add("Длинный элемент 2"); listBox.Items.Add("Длинный элемент 3"); listBox.Items.Add("Длинный элемент 4"); listBox.Items.Add("Длинный элемент 5"); listBox.Items.Add("Длинный элемент 6"); listBox.Items.Add("Длинный элемент 700"); listBox.HorizontalAlignment = HorizontalAlignment.Stretch; listBox.VerticalAlignment = VerticalAlignment.Stretch; scrollViewer.Content = listBox; // scrollViewer.HorizontalAlignment = HorizontalAlignment.Stretch; scrollViewer.VerticalAlignment = VerticalAlignment.Stretch; scrollViewer.HorizontalScrollEnabled = false; groupBox.Content = scrollViewer; groupBox.HorizontalAlignment = HorizontalAlignment.Stretch; windowsHost.Show(new Window() { X = 30, Y = 6, //MinHeight = 10, //MinWidth = 10, Name = "LongTitleWindow", Title = "Очень длинное название окна", Content = groupBox }); windowsHost.Show(window1); windowsHost.Show(createdFromXaml); //textBox.SetFocus(); todo : научиться задавать фокусный элемент до добавления в визуальное дерево //application.TerminalSizeChanged += ( sender, eventArgs ) => { // application.CanvasSize = new Size(eventArgs.Width, eventArgs.Height); // application.RootElementRect = new Rect(new Size(eventArgs.Width, eventArgs.Height)); // }; //windowsHost.Width = 80; //windowsHost.Height = 20; application.Run(windowsHost);//, new Size(80, 30), Rect.Empty); } }
/// <summary> /// Removes window from window host. /// </summary> public void CloseWindow(Window window) { windowInfos.Remove( window ); window.RaiseEvent( Window.DeactivatedEvent, new RoutedEventArgs( window, Window.DeactivatedEvent ) ); RemoveChild(window); window.RaiseEvent( Window.ClosedEvent, new RoutedEventArgs( window, Window.ClosedEvent ) ); // после удаления окна активизировать то, которое было активным до него IList<Control> childrenOrderedByZIndex = GetChildrenOrderedByZIndex(); int windowsStartIndex = 0; if ( mainMenu != null ) { assert( Children[ 0 ] == mainMenu ); windowsStartIndex++; } if ( childrenOrderedByZIndex.Count > windowsStartIndex ) { Window topWindow = ( Window ) childrenOrderedByZIndex[ childrenOrderedByZIndex.Count - 1 ]; topWindow.RaiseEvent( Window.ActivatedEvent, new RoutedEventArgs( topWindow, Window.ActivatedEvent ) ); initializeFocusOnActivatedWindow(topWindow); Invalidate(); } }
private void showCore( Window window, bool modal, bool outsideClickWillCloseWindow ) { Control topWindow = getTopWindow( ); if ( null != topWindow ) { topWindow.RaiseEvent( Window.DeactivatedEvent, new RoutedEventArgs( topWindow, Window.DeactivatedEvent ) ); } AddChild(window); window.RaiseEvent( Window.ActivatedEvent, new RoutedEventArgs( window, Window.ActivatedEvent ) ); initializeFocusOnActivatedWindow(window); windowInfos.Add( window, new WindowInfo( modal, outsideClickWillCloseWindow ) ); }
/// <summary> /// Adds window to window host children and shows it. /// </summary> public void Show(Window window) { showCore( window, false, false ); }
/// <summary> /// Adds window to window host children and shows it as modal window. /// </summary> public void ShowModal( Window window, bool outsideClickWillCloseWindow = false ) { showCore( window, true, outsideClickWillCloseWindow ); }
private void initializeFocusOnActivatedWindow( Window window ) { ConsoleApplication.Instance.FocusManager.SetFocusScope(window); // todo : add window.ChildToFocus support again }
/// <summary> /// Делает указанное окно активным. Если оно до этого не было активным, то /// по Z-индексу оно будет перемещено на самый верх, и получит клавиатурный фокус ввода. /// </summary> private void activateWindow(Window window) { int index = Children.IndexOf( window ); if (-1 == index) throw new InvalidOperationException("Assertion failed."); // Control oldTopWindow = Children[Children.Count - 1]; for (int i = index; i < Children.Count - 1; i++) { SwapChildsZOrder( i, i + 1 ); } // If need to change top window if (oldTopWindow != window) { oldTopWindow.RaiseEvent( Window.DeactivatedEvent, new RoutedEventArgs( oldTopWindow, Window.DeactivatedEvent ) ); window.RaiseEvent(Window.ActivatedEvent, new RoutedEventArgs(window, Window.ActivatedEvent)); } // If need to change focus (it is not only when need to change top window) // It may be need to change focus from menu to window, for example if ( ConsoleApplication.Instance.FocusManager.CurrentScope != window ) { initializeFocusOnActivatedWindow( window ); } }