Note: You can check the Avalonia docs for the TabControl and TabControl API if you need more information.
For Avalonia.FuncUI's DSL properties you can check TabControl.fs
The TabControl offers you a way to present content inside your application, each tab contains a different set of controls.
Set Tabs
let homePageContent = DockPanel.create [ DockPanel.children [ TextBox.create [ TextBox.text "Home"]]]let aboutPageContent = DockPanel.create [ DockPanel.children [ TextBox.create [ TextBox.text "About"]]]let tabs :IView list =[ TabItem.create [ TabItem.header "Home" TabItem.content homePageContent] TabItem.create [ TabItem.header "About" TabItem.content aboutPageContent]]TabControl.create [ TabControl.tabStripPlacement Dock.Left // Change this property to tell the app where to show the tab bar TabControl.viewItems tabs]
Set HostControl as content
You can also include individual Elmish Controls as the content of your tabs by using the ViewBuilder. Visit the example to see it in action
// counter.fsmodule Counter =typeState=(* state definition *)typeMsg=(* message definition *)let init =(* init definition *)let update state msg =(* update definition *)let view state dispatch =(* view definition *)// encapsule the Elmish architecture in this Host ControltypeHost()as this =inherit HostControl()do Elmish.Program.mkSimple (fun()-> init) update view|> Program.withHost this|> Program.run// Program.fslet aboutPageContent = DockPanel.create [ DockPanel.children [ TextBox.create [ TextBox.text "About"]]]let tabs :IView list =[ TabItem.create [ TabItem.header "Counter"// use the ViewBuilder to be able to use the Counter module in a stand alone TabItem.content (ViewBuilder.Create<Counter.Host>([]))] TabItem.create [ TabItem.header "About" TabItem.content aboutPageContent]]TabControl.create [ TabControl.viewItems tabs]
In the example above the Counter module defines a HostControl to allow that module to work by itself. This means you don't need to nest every view/control inside the main Elmish module of your app, this can help you reduce boilerplate and complexity in the main module of your application