public ResizableWindow(ContentManager content) { Title = "Resizable Window"; Width = 320; Height = 240; CanResize = true; var image = new Image { Texture = content.Load<Texture2D>("Sky"), }; var scrollViewer = new ScrollViewer { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Content = image }; Content = scrollViewer; }
//-------------------------------------------------------------- #region Methods //-------------------------------------------------------------- /// <inheritdoc/> protected override void OnLoad() { base.OnLoad(); // _panel and _scrollViewer are only initialized once and reused. They are not destroyed // in Unload(). if (_itemsPanel != null) return; string scrollViewerStyle = ContentStyle; if (string.IsNullOrEmpty(scrollViewerStyle)) scrollViewerStyle = "ScrollViewer"; _itemsPanel = new StackPanel { HorizontalAlignment = HorizontalAlignment.Stretch, Orientation = Orientation.Vertical, }; _scrollViewer = new ScrollViewer { Style = scrollViewerStyle, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, VerticalScrollBarVisibility = ScrollBarVisibility.Auto, Content = _itemsPanel, }; if (GlobalSettings.PlatformID == PlatformID.WindowsPhone7 || GlobalSettings.PlatformID == PlatformID.WindowsPhone8) { // On Windows Phone the DropDown fills the whole screen and a title is displayed on top. var titleTextBlockStyle = TitleTextBlockStyle; if (!string.IsNullOrEmpty(titleTextBlockStyle)) { var title = new TextBlock { Style = titleTextBlockStyle, Text = Owner.Title, }; // Connect DropDownButton.Title with title.Text. var titleProperty = Owner.Properties.Get<string>(DropDownButton.TitlePropertyId); var textProperty = title.Properties.Get<string>(TextBlock.TextPropertyId); titleProperty.Changed += textProperty.Change; var outerPanel = new StackPanel { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Orientation = Orientation.Vertical, }; outerPanel.Children.Add(title); outerPanel.Children.Add(_scrollViewer); Content = outerPanel; // The ContentStyle should be applied to the scroll viewer - not the outer panel: outerPanel.Style = "StackPanel"; _scrollViewer.Style = ContentStyle; } else { Content = _scrollViewer; } } else { Content = _scrollViewer; } }
private void CreateHelpWindow() { if (_helpWindow != null) return; // Window // ScrollViewer // TextBlock _helpTextBlock = new TextBlock(); // Text is set in UpdateHelpText(). var scrollViewer = new ScrollViewer { Content = _helpTextBlock, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled }; _helpWindow = new Window { Name = "HelpWindow", Title = "HELP", Content = scrollViewer, X = 50, Y = 50, Width = 640, Height = 480, CanResize = true, HideOnClose = true, IsVisible = false, }; _helpWindow.Closed += OnWindowClosed; }
private void CreateProfilerWindow() { if (_profilerWindow != null) return; // Window // ScrollViewer // TextView _profilerTextBlock = new TextBlock { // Text is set in UpdateHelpText(). Font = "Console", HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, }; var scrollViewer = new ScrollViewer { Content = _profilerTextBlock, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, }; _profilerWindow = new Window { Name = "ProfilerWindow", Title = "Profile", Content = scrollViewer, X = 50, Y = 50, Width = 640, Height = 480, CanResize = true, HideOnClose = true, IsVisible = false, }; _profilerWindow.Closed += OnWindowClosed; }
private void CreateMenuWindow() { if (_menuWindow != null) return; // Window // StackPanel (vertical) // StackPanel (horizontal) // Buttons // TextBlock // TabControl // TabItem * per category // ScrollViewer // StackPanel (vertical) // StackPanel (vertical) * per sample // Button // TextBlock _menuWindow = new Window { Name = "MenuWindow", Title = "Sample Browser", X = 50, Y = 50, IsVisible = false, HideOnClose = true }; _menuWindow.Closed += OnWindowClosed; var panel = new StackPanel { Margin = new Vector4F(10), Orientation = Orientation.Vertical, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch }; _menuWindow.Content = panel; var buttonsPanel = new StackPanel { Orientation = Orientation.Horizontal }; panel.Children.Add(buttonsPanel); AddButton(buttonsPanel, "Resume (Esc)", CloseWindows); AddButton(buttonsPanel, "Help (F1)", ShowHelpWindow); AddButton(buttonsPanel, "Profile (F3)", ShowProfilerWindow); AddButton(buttonsPanel, "Options (F4)", ShowOptionsWindow); #if !NETFX_CORE && !IOS AddButton(buttonsPanel, "Exit (Alt-F4)", _game.Exit); #endif var label = new TextBlock { Text = "Select Sample:", Margin = new Vector4F(2, 10, 0, 0) }; panel.Children.Add(label); var tabControl = new TabControl { Margin = new Vector4F(0, 3, 0, 0), Width = 580, #if WINDOWS_PHONE || ANDROID || IOS Height = 300 #else Height = 400 #endif }; panel.Children.Add(tabControl); // Each tab shows a sample category (Base, Mathematics, Geometry, ...). var samplesByCategory = _samples.GroupBy(t => SampleAttribute.GetSampleAttribute(t).Category); int category = -1; foreach (var grouping in samplesByCategory) { category++; var tabItem = new TabItem { Content = new TextBlock { Text = grouping.Key.ToString() }, }; tabControl.Items.Add(tabItem); var scrollViewer = new ScrollViewer { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled }; tabItem.TabPage = scrollViewer; var itemsPanel = new StackPanel { Orientation = Orientation.Vertical, Margin = new Vector4F(5), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch }; scrollViewer.Content = itemsPanel; foreach (Type sample in grouping) { var item = new StackPanel { Orientation = Orientation.Vertical }; itemsPanel.Children.Add(item); string title = sample.Name; var button = new Button { Content = new TextBlock { Text = title }, Width = 200, #if WINDOWS_PHONE || ANDROID || IOS Padding = new Vector4F(10), #else Padding = new Vector4F(0, 5, 0, 5), #endif }; int sampleIndex = _samples.IndexOf(sample); button.Click += (s, e) => { _nextSampleIndex = sampleIndex; CloseWindows(); }; item.Children.Add(button); string summary = SampleAttribute.GetSampleAttribute(sample).Summary; summary = summary.Replace("\r\n", " "); var summaryTextBlock = new TextBlock { Margin = new Vector4F(0, 3, 0, 12), Text = summary, WrapText = true }; item.Children.Add(summaryTextBlock); } } }
public AllControlsWindow(ContentManager content, IUIRenderer renderer) { Title = "All Controls (This window has a context menu!)"; CanResize = false; // The window content is set to a horizontal stack panel that contains two vertical // stack panels. The controls are added to the vertical panels. // ----- Button with text content var button0 = new Button { Content = new TextBlock { Text = "Button" }, Margin = new Vector4F(4), }; // ----- Button with mixed content // The content of a button is usually a text block but can be any UI control. // Let's try a button with image + text. var buttonContentPanel = new StackPanel { Orientation = Orientation.Horizontal }; buttonContentPanel.Children.Add(new Image { Width = 16, Height = 16, Texture = content.Load<Texture2D>("Icon") }); buttonContentPanel.Children.Add(new TextBlock { Margin = new Vector4F(4, 0, 0, 0), Text = "Button with image", VerticalAlignment = VerticalAlignment.Center, }); var button1 = new Button { Content = buttonContentPanel, Margin = new Vector4F(4), }; // ----- Drop-down button var dropDown = new DropDownButton { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(4), MaxDropDownHeight = 250, }; for (int i = 0; i < 20; i++) { dropDown.Items.Add("DropDownItem " + i); } dropDown.SelectedIndex = 0; // ----- Check box var checkBox = new CheckBox { Margin = new Vector4F(4), Content = new TextBlock { Text = "CheckBox" }, }; // ----- Group of radio buttons var radioButton0 = new RadioButton { Margin = new Vector4F(4, 8, 4, 4), Content = new TextBlock { Text = "RadioButton0" }, }; var radioButton1 = new RadioButton { Margin = new Vector4F(4, 2, 4, 2), Content = new TextBlock { Text = "RadioButton1" }, }; var radioButton2 = new RadioButton { Margin = new Vector4F(4, 2, 4, 4), Content = new TextBlock { Text = "RadioButton1" }, }; // ----- Progress bar with value var progressBar0 = new ProgressBar { IsIndeterminate = false, Value = 75, Margin = new Vector4F(4, 8, 4, 4), HorizontalAlignment = HorizontalAlignment.Stretch, Cursor = renderer.GetCursor("Wait"), }; // ----- Progress bar without value (indeterminate) var progressBar1 = new ProgressBar { IsIndeterminate = true, Margin = new Vector4F(4), HorizontalAlignment = HorizontalAlignment.Stretch, Cursor = renderer.GetCursor("Wait"), }; // ----- Slider connected with a text box. var slider = new Slider { Value = 60, Margin = new Vector4F(4), HorizontalAlignment = HorizontalAlignment.Stretch, }; var sliderValue = new TextBlock { Margin = new Vector4F(4, 0, 4, 4), Text = "(Value = 60)", HorizontalAlignment = HorizontalAlignment.Right }; // To connect the slider with the text box, we need to get the "Value" property. var valueProperty = slider.Properties.Get<float>("Value"); // This property is a GameObjectProperty<float>. We can attach an event handler to // the Changed event of the property. valueProperty.Changed += (s, e) => sliderValue.Text = "(Value = " + (int)e.NewValue + ")"; // ----- Scroll bar var scrollBar = new ScrollBar { Style = "ScrollBarHorizontal", SmallChange = 1, LargeChange = 10, Value = 45, ViewportSize = 0.3f, Margin = new Vector4F(4), HorizontalAlignment = HorizontalAlignment.Stretch, }; // Add the controls to the first vertical stack panel. var stackPanel0 = new StackPanel { Margin = new Vector4F(4), }; stackPanel0.Children.Add(button0); stackPanel0.Children.Add(button1); stackPanel0.Children.Add(dropDown); stackPanel0.Children.Add(checkBox); stackPanel0.Children.Add(radioButton0); stackPanel0.Children.Add(radioButton1); stackPanel0.Children.Add(radioButton2); stackPanel0.Children.Add(progressBar0); stackPanel0.Children.Add(progressBar1); stackPanel0.Children.Add(slider); stackPanel0.Children.Add(sliderValue); stackPanel0.Children.Add(scrollBar); // ----- Group box var groupBox = new GroupBox { Title = "GroupBox", HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(4), Content = new TextBlock { Margin = new Vector4F(4), Text = "GroupBox Content" } }; // ----- Tab control with 3 tab items var tabItem0 = new TabItem { TabPage = new TextBlock { Margin = new Vector4F(4), Text = "Page 0" }, Content = new TextBlock { Text = "Item 0" }, }; var tabItem1 = new TabItem { TabPage = new TextBlock { Margin = new Vector4F(4), Text = "Page 1" }, Content = new TextBlock { Text = "Item 1" }, }; var tabItem2 = new TabItem { TabPage = new TextBlock { Margin = new Vector4F(4), Text = "Page 2" }, Content = new TextBlock { Text = "Item 2" }, }; var tabControl = new TabControl { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(4), }; tabControl.Items.Add(tabItem0); tabControl.Items.Add(tabItem1); tabControl.Items.Add(tabItem2); // ----- Scroll viewer showing an image var image = new Image { Texture = content.Load<Texture2D>("Sky"), }; var scrollViewer = new ScrollViewer { Margin = new Vector4F(4), HorizontalAlignment = HorizontalAlignment.Stretch, MinHeight = 100, HorizontalOffset = 200, VerticalOffset = 200, Height = 200, }; scrollViewer.Content = image; // ----- Text box var textBox0 = new TextBox { Margin = new Vector4F(4), Text = "The quick brown fox jumps over the lazy dog.", MaxLines = 1, HorizontalAlignment = HorizontalAlignment.Stretch, }; // ----- Password box var textBox1 = new TextBox { Margin = new Vector4F(4), Text = "Secret password!", MaxLines = 1, IsPassword = true, HorizontalAlignment = HorizontalAlignment.Stretch, }; // ----- Multi-line text box var textBox2 = new TextBox { Margin = new Vector4F(4), Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifend, nulla semper vestibulum congue, lectus lectus aliquam magna, lobortis luctus sem magna sit amet elit. Integer at neque nec mi dapibus tincidunt. Maecenas elit quam, varius luctus rutrum ut, congue quis libero. In hac habitasse platea dictumst. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus eu ante eros. Etiam odio lectus, sagittis non dictum eu, faucibus vitae magna. Maecenas mi lorem, semper vel condimentum sit amet, vehicula quis nulla. Cras suscipit scelerisque orci, ac ullamcorper lorem egestas sed. Nulla facilisi. Nam justo enim, mollis nec condimentum non, consectetur vel purus. Curabitur ac diam vitae justo ultricies auctor.\n" + "Pellentesque interdum vehicula nisi sed congue. Etiam eget magna nec metus suscipit tincidunt et in lectus. Praesent sapien tortor, congue et semper eu, mattis ac lorem. Duis id est et justo tempus consectetur. Aliquam rutrum ullamcorper augue non varius. Fusce ornare lectus et ipsum lobortis ut venenatis tellus sodales. Proin venenatis scelerisque dui eu viverra. Pellentesque vitae risus eget tellus vehicula molestie et quis ante. Nulla imperdiet rhoncus ante, eu tristique ante euismod id. Sed varius varius hendrerit. Praesent massa tortor, gravida suscipit lacinia non, suscipit a ipsum. Integer vulputate, felis vitae consectetur bibendum, ante velit tincidunt nunc, in convallis erat dolor eu purus.", MinLines = 5, MaxLines = 5, HorizontalAlignment = HorizontalAlignment.Stretch, }; // ----- Console (command prompt) var console = new Console { Margin = new Vector4F(4), HorizontalAlignment = HorizontalAlignment.Stretch, MinHeight = 100, }; // Add the controls to the second vertical stack panel. var stackPanel1 = new StackPanel { Width = 250, Margin = new Vector4F(4), }; stackPanel1.Children.Add(groupBox); stackPanel1.Children.Add(tabControl); stackPanel1.Children.Add(scrollViewer); stackPanel1.Children.Add(textBox0); stackPanel1.Children.Add(textBox1); stackPanel1.Children.Add(textBox2); stackPanel1.Children.Add(console); // Add the two vertical stack panel into a horizontal stack panel. var stackPanelHorizontal = new StackPanel { Orientation = Orientation.Horizontal }; stackPanelHorizontal.Children.Add(stackPanel0); stackPanelHorizontal.Children.Add(stackPanel1); Content = stackPanelHorizontal; // ----- Add a context menu to the window. (Each UI control can have its own context menu.) ContextMenu = new ContextMenu(); // Add menu items. for (int i = 0; i < 10; i++) { var menuItem = new MenuItem { Content = new TextBlock { Text = "MenuItem" + i }, }; ContextMenu.Items.Add(menuItem); } }
// Create a window which shows all controls. public WpWindow() { CanDrag = false; CanResize = false; HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Stretch; Title = "DigitalRune Game UI Sample"; // We handle the Closed event. Closed += OnClosed; var applicationTitle = new TextBlock { Text = "DIGITALRUNE GUI SAMPLE", Margin = new Vector4F(12, 0, 0, 0), }; var pageTitle = new TextBlock { Text = "controls", Style = "TextBlockTitle", Margin = new Vector4F(9, -7, 0, 0), }; var titlePanel = new StackPanel { Margin = new Vector4F(12, 24, 8, 8), }; titlePanel.Children.Add(applicationTitle); titlePanel.Children.Add(pageTitle); var textBlock = new TextBlock { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), WrapText = true, Text = "This is a window with a lot of controls.\n" + "All controls are within a scroll viewer.\n" + "Tap-and-hold in window area to display the context menu of the window.", Style = "TextBlockSubtle" }; var buttonEnabled = new Button { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "Button" }, }; var buttonDisabled = new Button { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "Button (Disabled)" }, IsEnabled = false, }; var checkBoxEnabled = new CheckBox { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "CheckBox" }, }; var checkBoxEnabledChecked = new CheckBox { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "CheckBox" }, IsChecked = true, }; var checkBoxDisabled = new CheckBox { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "CheckBox (Disabled)" }, IsEnabled = false, }; var checkBoxDisabledChecked = new CheckBox { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "CheckBox (Disabled)" }, IsEnabled = false, IsChecked = true, }; var checkBoxLotsOfText = new CheckBox { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "CheckBox with a lot of text that does not fit into a single line." }, }; var radioButton0 = new RadioButton { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "RadioButton" }, }; var radioButton1 = new RadioButton { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "RadioButton with a lot of text that does not fit into a single line." }, IsChecked = true }; var radioButton2 = new RadioButton { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "RadioButton" }, IsEnabled = false, }; var radioButton3 = new RadioButton { Margin = new Vector4F(0, 10, 0, 10), Content = new TextBlock { Text = "RadioButton (Disabled)" }, IsEnabled = false, IsChecked = true, GroupName = "OtherGroup", // Put in another group, so that the IsChecked state is not removed when the user clicks another radio button. }; var dropDownButton = new DropDownButton { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Title = "DROPDOWN ITEMS", SelectedIndex = 0, }; // Add drop down items - each items is a string. Per default, the DropDownButton // calls ToString() for each item and displays it in a text block. for (int i = 0; i < 30; i++) dropDownButton.Items.Add("DropDownItem " + i); var dropDownButtonDisabled = new DropDownButton { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Title = "DROPDOWN ITEMS", IsEnabled = false, SelectedIndex = 0, }; // Add drop down items - each items is a string. Per default, the DropDownButton // calls ToString() for each item and displays it in a text block. for (int i = 0; i < 30; i++) dropDownButtonDisabled.Items.Add("DropDownItem " + i + "(Disabled)"); var textBoxEnabled = new TextBox { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), GuideTitle = "GUIDE TITLE", GuideDescription = "Guide description:", Text = "TextBox (Enabled)" }; var textBoxDisabled = new TextBox { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Text = "TextBox (Disabled)", IsEnabled = false, }; var slider = new Slider { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 24, 0, 24), Value = 33 }; var progressBar = new ProgressBar { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), Value = 66, }; var progressBarIndeterminate = new ProgressBar { HorizontalAlignment = HorizontalAlignment.Stretch, Margin = new Vector4F(0, 10, 0, 10), IsIndeterminate = true, }; var stackPanel = new StackPanel { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Margin = new Vector4F(0, 0, 8, 0), }; stackPanel.Children.Add(textBlock); stackPanel.Children.Add(buttonEnabled); stackPanel.Children.Add(buttonDisabled); stackPanel.Children.Add(checkBoxEnabled); stackPanel.Children.Add(checkBoxEnabledChecked); stackPanel.Children.Add(checkBoxDisabled); stackPanel.Children.Add(checkBoxDisabledChecked); stackPanel.Children.Add(checkBoxLotsOfText); stackPanel.Children.Add(radioButton0); stackPanel.Children.Add(radioButton1); stackPanel.Children.Add(radioButton2); stackPanel.Children.Add(radioButton3); stackPanel.Children.Add(dropDownButton); stackPanel.Children.Add(dropDownButtonDisabled); stackPanel.Children.Add(textBoxEnabled); stackPanel.Children.Add(textBoxDisabled); stackPanel.Children.Add(slider); stackPanel.Children.Add(progressBar); stackPanel.Children.Add(progressBarIndeterminate); var scrollViewer = new ScrollViewer { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Content = stackPanel, HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, Margin = new Vector4F(24, 0, 8, 0) }; var layoutRoot = new StackPanel { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Margin = new Vector4F(0, 0, 0, 0), }; layoutRoot.Children.Add(titlePanel); layoutRoot.Children.Add(scrollViewer); Content = layoutRoot; // Add a context menu MenuItem item0 = new MenuItem { Content = new TextBlock { Text = "Item 0" }, }; MenuItem item1 = new MenuItem { Content = new TextBlock { Text = "Item 1" }, }; MenuItem item2 = new MenuItem { Content = new TextBlock { Text = "Item 2" }, }; MenuItem item3 = new MenuItem { Content = new TextBlock { Text = "Item 3" }, }; MenuItem item4 = new MenuItem { Content = new TextBlock { Text = "Item 4" }, }; ContextMenu = new ContextMenu(); ContextMenu.Items.Add(item0); ContextMenu.Items.Add(item1); ContextMenu.Items.Add(item2); ContextMenu.Items.Add(item3); ContextMenu.Items.Add(item4); }