S&box Wiki

Revision Difference

ui_binding#547882

⤶ <cat>Dev.UI</cat>⤶ <title>UI Layout Binding</title>⤶ ⤶ To enable interaction between code and layout, we enable binding.⤶ ⤶ # Variables⤶ ⤶ Create a property on your component's code.⤶ ⤶ ```csharp⤶ public string MyVariable { get; set; }⤶ ```⤶ ⤶ Bind it to any property by adding @ before the property name.⤶ ⤶ ```html⤶ <text @text="MyVariable"></text>⤶ ```⤶ ⤶ The property will be updated when your variable changes.⤶ ⤶ <note>The properties are polled at regular intervals. If the value is different we update the value. This is our compromise between performance and ease of use.</note>⤶ ⤶ # Elements⤶ ⤶ You can create a reference to an element.⤶ ⤶ ```csharp⤶ public Label GameTitle { get; set; }⤶ ```⤶ ⤶ ```html⤶ <text @ref="GameTitle"></text>⤶ ```⤶ ⤶ This variable will be available immediately after the layout is loaded.⤶ ⤶ ```csharp⤶ LoadLayout( "/ui/mainmenu/mainmenu.html" );⤶ ⤶ GameTitle.Text = "s&box";⤶ GameTitle.Class.Add( "game_title" );⤶ ```⤶ ⤶ # Events⤶ ⤶ You can call events from elements⤶ ⤶ ```html⤶ <button class="option" onclick="PlayGame()">Play Game</button>⤶ ```⤶ ⤶ ```csharp⤶ public void PlayGame()⤶ {⤶ // Do stuff⤶ }⤶ ```⤶ ⤶ The method is called on the panel which loaded the layout.⤶ ⤶ # Panel Events⤶ ⤶ Similar to events, you can wire up Panel Events that don't need any code. In this example clicking on the Options button toggles the game_title class on it.⤶ ⤶ ```html⤶ <button class="option" onclick="this.ClassToggle( 'game_title' )">Options</button>⤶ ```⤶ ⤶ You can also target this towards other panels by name⤶ ⤶ ```html⤶ <button name="MyPanel">Watch me</button>⤶ <button onclick="MyPanel.ClassToggle( 'hidden' )">Click Me</button>⤶ ```⤶ ⤶ # Special Events⤶ ⤶ Adding `.console` to the event name will run the string as a console command when the event triggers.⤶ ⤶ ```html⤶ <button onclick.console="map de_dust">Play Game</button>⤶ ```