S&box Wiki

Revision Difference

ui_binding#528594

<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 if different we update the value. This is our comprimise 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.htm" ); 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> ```