├── .gitignore ├── README.md ├── README_kor.md └── src ├── .idea └── .idea.AvaloniaNavigationBar │ └── .idea │ ├── .gitignore │ ├── .name │ ├── avalonia.xml │ ├── indexLayout.xml │ ├── libraries │ ├── androidx_activity_activity.xml │ ├── androidx_annotation_annotation.xml │ ├── androidx_annotation_annotation_experimental.xml │ ├── androidx_annotation_annotation_jvm.xml │ ├── androidx_appcompat_appcompat.xml │ ├── androidx_appcompat_appcompat_resources.xml │ ├── androidx_arch_core_core_common.xml │ ├── androidx_arch_core_core_runtime.xml │ ├── androidx_collection_collection.xml │ ├── androidx_collection_collection_jvm.xml │ ├── androidx_concurrent_concurrent_futures.xml │ ├── androidx_core_core.xml │ ├── androidx_core_core_ktx.xml │ ├── androidx_core_core_splashscreen.xml │ ├── androidx_cursoradapter_cursoradapter.xml │ ├── androidx_customview_customview.xml │ ├── androidx_drawerlayout_drawerlayout.xml │ ├── androidx_emoji2_emoji2.xml │ ├── androidx_emoji2_emoji2_views_helper.xml │ ├── androidx_fragment_fragment.xml │ ├── androidx_interpolator_interpolator.xml │ ├── androidx_lifecycle_lifecycle_common.xml │ ├── androidx_lifecycle_lifecycle_livedata_core.xml │ ├── androidx_lifecycle_lifecycle_process.xml │ ├── androidx_lifecycle_lifecycle_runtime.xml │ ├── androidx_lifecycle_lifecycle_viewmodel.xml │ ├── androidx_lifecycle_lifecycle_viewmodel_savedstate.xml │ ├── androidx_loader_loader.xml │ ├── androidx_profileinstaller_profileinstaller.xml │ ├── androidx_resourceinspection_resourceinspection_annotation.xml │ ├── androidx_savedstate_savedstate.xml │ ├── androidx_startup_startup_runtime.xml │ ├── androidx_tracing_tracing.xml │ ├── androidx_vectordrawable_vectordrawable.xml │ ├── androidx_vectordrawable_vectordrawable_animated.xml │ ├── androidx_versionedparcelable_versionedparcelable.xml │ ├── androidx_viewpager_viewpager.xml │ ├── guava_listenablefuture.xml │ ├── org_jetbrains_annotations_24_0_1.xml │ ├── org_jetbrains_kotlin_kotlin_stdlib_1_9_10.xml │ ├── org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml │ ├── org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml │ ├── org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml │ ├── org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_3.xml │ └── org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_3.xml │ └── vcs.xml ├── AvaloniaNavigationBar.sln ├── AvaloniaNavigationBar ├── AvaloniaNavigationBar.csproj ├── Interface │ └── INavigationAdapter.cs └── Style │ ├── BottomNavigatorBarStyle2.axaml │ ├── BottomNavigatorBarStyle2.axaml.cs │ ├── BottomNavigatorBarStyle2Item.axaml │ ├── BottomNavigatorBarStyle2Item.axaml.cs │ ├── MagicBar.axaml │ ├── MagicBar.axaml.cs │ └── Navibar.cs └── DemoApp ├── .gitignore ├── DemoApp.Android ├── DemoApp.Android.csproj ├── Icon.png ├── MainActivity.cs ├── Properties │ └── AndroidManifest.xml └── Resources │ ├── AboutResources.txt │ ├── drawable-night-v31 │ └── avalonia_anim.xml │ ├── drawable-v31 │ └── avalonia_anim.xml │ ├── drawable │ └── splash_screen.xml │ ├── values-night │ └── colors.xml │ ├── values-v31 │ └── styles.xml │ └── values │ ├── colors.xml │ └── styles.xml ├── DemoApp.Browser ├── DemoApp.Browser.csproj ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ └── launchSettings.json ├── runtimeconfig.template.json └── wwwroot │ ├── app.css │ ├── favicon.ico │ ├── index.html │ └── main.js ├── DemoApp.Desktop ├── DemoApp.Desktop.csproj ├── Program.cs └── app.manifest ├── DemoApp.iOS ├── AppDelegate.cs ├── DemoApp.iOS.csproj ├── Entitlements.plist ├── Info.plist ├── Main.cs └── Resources │ └── LaunchScreen.xib ├── DemoApp.sln ├── DemoApp ├── App.axaml ├── App.axaml.cs ├── Assets │ └── avalonia-logo.ico ├── DemoApp.csproj ├── ViewModels │ ├── MainViewModel.cs │ └── ViewModelBase.cs └── Views │ ├── BottomNavigatorBoarStyle2Page.axaml │ ├── BottomNavigatorBoarStyle2Page.axaml.cs │ ├── MagicBarSamplePage.axaml │ ├── MagicBarSamplePage.axaml.cs │ ├── MainView.axaml │ ├── MainView.axaml.cs │ ├── MainWindow.axaml │ └── MainWindow.axaml.cs └── Directory.Build.props /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/rider,visualstudio 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=rider,visualstudio 3 | 4 | ### Rider ### 5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 7 | 8 | # User-specific stuff 9 | .idea/**/workspace.xml 10 | .idea/**/tasks.xml 11 | .idea/**/usage.statistics.xml 12 | .idea/**/dictionaries 13 | .idea/**/shelf 14 | 15 | # AWS User-specific 16 | .idea/**/aws.xml 17 | 18 | # Generated files 19 | .idea/**/contentModel.xml 20 | 21 | # Sensitive or high-churn files 22 | .idea/**/dataSources/ 23 | .idea/**/dataSources.ids 24 | .idea/**/dataSources.local.xml 25 | .idea/**/sqlDataSources.xml 26 | .idea/**/dynamic.xml 27 | .idea/**/uiDesigner.xml 28 | .idea/**/dbnavigator.xml 29 | 30 | # Gradle 31 | .idea/**/gradle.xml 32 | .idea/**/libraries 33 | 34 | # Gradle and Maven with auto-import 35 | # When using Gradle or Maven with auto-import, you should exclude module files, 36 | # since they will be recreated, and may cause churn. Uncomment if using 37 | # auto-import. 38 | # .idea/artifacts 39 | # .idea/compiler.xml 40 | # .idea/jarRepositories.xml 41 | # .idea/modules.xml 42 | # .idea/*.iml 43 | # .idea/modules 44 | # *.iml 45 | # *.ipr 46 | 47 | # CMake 48 | cmake-build-*/ 49 | 50 | # Mongo Explorer plugin 51 | .idea/**/mongoSettings.xml 52 | 53 | # File-based project format 54 | *.iws 55 | 56 | # IntelliJ 57 | out/ 58 | 59 | # mpeltonen/sbt-idea plugin 60 | .idea_modules/ 61 | 62 | # JIRA plugin 63 | atlassian-ide-plugin.xml 64 | 65 | # Cursive Clojure plugin 66 | .idea/replstate.xml 67 | 68 | # SonarLint plugin 69 | .idea/sonarlint/ 70 | 71 | # Crashlytics plugin (for Android Studio and IntelliJ) 72 | com_crashlytics_export_strings.xml 73 | crashlytics.properties 74 | crashlytics-build.properties 75 | fabric.properties 76 | 77 | # Editor-based Rest Client 78 | .idea/httpRequests 79 | 80 | # Android studio 3.1+ serialized cache file 81 | .idea/caches/build_file_checksums.ser 82 | 83 | ### VisualStudio ### 84 | ## Ignore Visual Studio temporary files, build results, and 85 | ## files generated by popular Visual Studio add-ons. 86 | ## 87 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore 88 | 89 | # User-specific files 90 | *.rsuser 91 | *.suo 92 | *.user 93 | *.userosscache 94 | *.sln.docstates 95 | 96 | # User-specific files (MonoDevelop/Xamarin Studio) 97 | *.userprefs 98 | 99 | # Mono auto generated files 100 | mono_crash.* 101 | 102 | # Build results 103 | [Dd]ebug/ 104 | [Dd]ebugPublic/ 105 | [Rr]elease/ 106 | [Rr]eleases/ 107 | x64/ 108 | x86/ 109 | [Ww][Ii][Nn]32/ 110 | [Aa][Rr][Mm]/ 111 | [Aa][Rr][Mm]64/ 112 | bld/ 113 | [Bb]in/ 114 | [Oo]bj/ 115 | [Ll]og/ 116 | [Ll]ogs/ 117 | 118 | # Visual Studio 2015/2017 cache/options directory 119 | .vs/ 120 | # Uncomment if you have tasks that create the project's static files in wwwroot 121 | #wwwroot/ 122 | 123 | # Visual Studio 2017 auto generated files 124 | Generated\ Files/ 125 | 126 | # MSTest test Results 127 | [Tt]est[Rr]esult*/ 128 | [Bb]uild[Ll]og.* 129 | 130 | # NUnit 131 | *.VisualState.xml 132 | TestResult.xml 133 | nunit-*.xml 134 | 135 | # Build Results of an ATL Project 136 | [Dd]ebugPS/ 137 | [Rr]eleasePS/ 138 | dlldata.c 139 | 140 | # Benchmark Results 141 | BenchmarkDotNet.Artifacts/ 142 | 143 | # .NET Core 144 | project.lock.json 145 | project.fragment.lock.json 146 | artifacts/ 147 | 148 | # ASP.NET Scaffolding 149 | ScaffoldingReadMe.txt 150 | 151 | # StyleCop 152 | StyleCopReport.xml 153 | 154 | # Files built by Visual Studio 155 | *_i.c 156 | *_p.c 157 | *_h.h 158 | *.ilk 159 | *.meta 160 | *.obj 161 | *.iobj 162 | *.pch 163 | *.pdb 164 | *.ipdb 165 | *.pgc 166 | *.pgd 167 | *.rsp 168 | *.sbr 169 | *.tlb 170 | *.tli 171 | *.tlh 172 | *.tmp 173 | *.tmp_proj 174 | *_wpftmp.csproj 175 | *.log 176 | *.tlog 177 | *.vspscc 178 | *.vssscc 179 | .builds 180 | *.pidb 181 | *.svclog 182 | *.scc 183 | 184 | # Chutzpah Test files 185 | _Chutzpah* 186 | 187 | # Visual C++ cache files 188 | ipch/ 189 | *.aps 190 | *.ncb 191 | *.opendb 192 | *.opensdf 193 | *.sdf 194 | *.cachefile 195 | *.VC.db 196 | *.VC.VC.opendb 197 | 198 | # Visual Studio profiler 199 | *.psess 200 | *.vsp 201 | *.vspx 202 | *.sap 203 | 204 | # Visual Studio Trace Files 205 | *.e2e 206 | 207 | # TFS 2012 Local Workspace 208 | $tf/ 209 | 210 | # Guidance Automation Toolkit 211 | *.gpState 212 | 213 | # ReSharper is a .NET coding add-in 214 | _ReSharper*/ 215 | *.[Rr]e[Ss]harper 216 | *.DotSettings.user 217 | 218 | # TeamCity is a build add-in 219 | _TeamCity* 220 | 221 | # DotCover is a Code Coverage Tool 222 | *.dotCover 223 | 224 | # AxoCover is a Code Coverage Tool 225 | .axoCover/* 226 | !.axoCover/settings.json 227 | 228 | # Coverlet is a free, cross platform Code Coverage Tool 229 | coverage*.json 230 | coverage*.xml 231 | coverage*.info 232 | 233 | # Visual Studio code coverage results 234 | *.coverage 235 | *.coveragexml 236 | 237 | # NCrunch 238 | _NCrunch_* 239 | .*crunch*.local.xml 240 | nCrunchTemp_* 241 | 242 | # MightyMoose 243 | *.mm.* 244 | AutoTest.Net/ 245 | 246 | # Web workbench (sass) 247 | .sass-cache/ 248 | 249 | # Installshield output folder 250 | [Ee]xpress/ 251 | 252 | # DocProject is a documentation generator add-in 253 | DocProject/buildhelp/ 254 | DocProject/Help/*.HxT 255 | DocProject/Help/*.HxC 256 | DocProject/Help/*.hhc 257 | DocProject/Help/*.hhk 258 | DocProject/Help/*.hhp 259 | DocProject/Help/Html2 260 | DocProject/Help/html 261 | 262 | # Click-Once directory 263 | publish/ 264 | 265 | # Publish Web Output 266 | *.[Pp]ublish.xml 267 | *.azurePubxml 268 | # Note: Comment the next line if you want to checkin your web deploy settings, 269 | # but database connection strings (with potential passwords) will be unencrypted 270 | *.pubxml 271 | *.publishproj 272 | 273 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 274 | # checkin your Azure Web App publish settings, but sensitive information contained 275 | # in these scripts will be unencrypted 276 | PublishScripts/ 277 | 278 | # NuGet Packages 279 | *.nupkg 280 | # NuGet Symbol Packages 281 | *.snupkg 282 | # The packages folder can be ignored because of Package Restore 283 | **/[Pp]ackages/* 284 | # except build/, which is used as an MSBuild target. 285 | !**/[Pp]ackages/build/ 286 | # Uncomment if necessary however generally it will be regenerated when needed 287 | #!**/[Pp]ackages/repositories.config 288 | # NuGet v3's project.json files produces more ignorable files 289 | *.nuget.props 290 | *.nuget.targets 291 | 292 | # Microsoft Azure Build Output 293 | csx/ 294 | *.build.csdef 295 | 296 | # Microsoft Azure Emulator 297 | ecf/ 298 | rcf/ 299 | 300 | # Windows Store app package directories and files 301 | AppPackages/ 302 | BundleArtifacts/ 303 | Package.StoreAssociation.xml 304 | _pkginfo.txt 305 | *.appx 306 | *.appxbundle 307 | *.appxupload 308 | 309 | # Visual Studio cache files 310 | # files ending in .cache can be ignored 311 | *.[Cc]ache 312 | # but keep track of directories ending in .cache 313 | !?*.[Cc]ache/ 314 | 315 | # Others 316 | ClientBin/ 317 | ~$* 318 | *~ 319 | *.dbmdl 320 | *.dbproj.schemaview 321 | *.jfm 322 | *.pfx 323 | *.publishsettings 324 | orleans.codegen.cs 325 | 326 | # Including strong name files can present a security risk 327 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 328 | #*.snk 329 | 330 | # Since there are multiple workflows, uncomment next line to ignore bower_components 331 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 332 | #bower_components/ 333 | 334 | # RIA/Silverlight projects 335 | Generated_Code/ 336 | 337 | # Backup & report files from converting an old project file 338 | # to a newer Visual Studio version. Backup files are not needed, 339 | # because we have git ;-) 340 | _UpgradeReport_Files/ 341 | Backup*/ 342 | UpgradeLog*.XML 343 | UpgradeLog*.htm 344 | ServiceFabricBackup/ 345 | *.rptproj.bak 346 | 347 | # SQL Server files 348 | *.mdf 349 | *.ldf 350 | *.ndf 351 | 352 | # Business Intelligence projects 353 | *.rdl.data 354 | *.bim.layout 355 | *.bim_*.settings 356 | *.rptproj.rsuser 357 | *- [Bb]ackup.rdl 358 | *- [Bb]ackup ([0-9]).rdl 359 | *- [Bb]ackup ([0-9][0-9]).rdl 360 | 361 | # Microsoft Fakes 362 | FakesAssemblies/ 363 | 364 | # GhostDoc plugin setting file 365 | *.GhostDoc.xml 366 | 367 | # Node.js Tools for Visual Studio 368 | .ntvs_analysis.dat 369 | node_modules/ 370 | 371 | # Visual Studio 6 build log 372 | *.plg 373 | 374 | # Visual Studio 6 workspace options file 375 | *.opt 376 | 377 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 378 | *.vbw 379 | 380 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 381 | *.vbp 382 | 383 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 384 | *.dsw 385 | *.dsp 386 | 387 | # Visual Studio 6 technical files 388 | 389 | # Visual Studio LightSwitch build output 390 | **/*.HTMLClient/GeneratedArtifacts 391 | **/*.DesktopClient/GeneratedArtifacts 392 | **/*.DesktopClient/ModelManifest.xml 393 | **/*.Server/GeneratedArtifacts 394 | **/*.Server/ModelManifest.xml 395 | _Pvt_Extensions 396 | 397 | # Paket dependency manager 398 | .paket/paket.exe 399 | paket-files/ 400 | 401 | # FAKE - F# Make 402 | .fake/ 403 | 404 | # CodeRush personal settings 405 | .cr/personal 406 | 407 | # Python Tools for Visual Studio (PTVS) 408 | __pycache__/ 409 | *.pyc 410 | 411 | # Cake - Uncomment if you are using it 412 | # tools/** 413 | # !tools/packages.config 414 | 415 | # Tabs Studio 416 | *.tss 417 | 418 | # Telerik's JustMock configuration file 419 | *.jmconfig 420 | 421 | # BizTalk build output 422 | *.btp.cs 423 | *.btm.cs 424 | *.odx.cs 425 | *.xsd.cs 426 | 427 | # OpenCover UI analysis results 428 | OpenCover/ 429 | 430 | # Azure Stream Analytics local run output 431 | ASALocalRun/ 432 | 433 | # MSBuild Binary and Structured Log 434 | *.binlog 435 | 436 | # NVidia Nsight GPU debugger configuration file 437 | *.nvuser 438 | 439 | # MFractors (Xamarin productivity tool) working folder 440 | .mfractor/ 441 | 442 | # Local History for Visual Studio 443 | .localhistory/ 444 | 445 | # Visual Studio History (VSHistory) files 446 | .vshistory/ 447 | 448 | # BeatPulse healthcheck temp database 449 | healthchecksdb 450 | 451 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 452 | MigrationBackup/ 453 | 454 | # Ionide (cross platform F# VS Code tools) working folder 455 | .ionide/ 456 | 457 | # Fody - auto-generated XML schema 458 | FodyWeavers.xsd 459 | 460 | # VS Code files for those working on multiple tools 461 | .vscode/* 462 | !.vscode/settings.json 463 | !.vscode/tasks.json 464 | !.vscode/launch.json 465 | !.vscode/extensions.json 466 | *.code-workspace 467 | 468 | # Local History for Visual Studio Code 469 | .history/ 470 | 471 | # Windows Installer files from build outputs 472 | *.cab 473 | *.msi 474 | *.msix 475 | *.msm 476 | *.msp 477 | 478 | # JetBrains Rider 479 | *.sln.iml 480 | 481 | ### VisualStudio Patch ### 482 | # Additional files built by Visual Studio 483 | 484 | # End of https://www.toptal.com/developers/gitignore/api/rider,visualstudio -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AvaloniaUI AvaloniaNavigationBar Project 2 | 3 | ### Motivation 4 | This NavigationBar was inspired by my friends Vicky and James' WPF NavigationBar. In addition to this, we have long been contributing together to WPF technology research, open-source activities, and activities such as NuGet packages. I would like to express my gratitude to my friends. 5 | 6 | ### Introduction 7 | This project is an example implementation of a user-friendly AvaloniaNavigationBar using the AvaloniaUI framework. AvaloniaUI is a powerful and flexible tool for cross-platform desktop application development. In this example, we demonstrate how to create a bottom navigation bar using the ListBox control, enhancing the efficiency and accessibility of the user interface. 8 | 9 | ### Features 10 | - **Cross-Platform Compatibility**: Works seamlessly on Windows, Linux, and macOS. 11 | - **Customizability**: Offers a variety of styles and themes, allowing developers to tailor the design to their preferences. 12 | - **Enhanced User Experience**: An intuitive UI improves the usability of the application. 13 | ### How It's Made 14 | Implementation Using AvaloniaUI ListBox 15 | The AvaloniaNavigationBar is based on the ListBox control, enabling efficient display of items and responsiveness to user input. Each item is composed of an icon and text for easy identification and selection by the user. 16 | 17 | ### Styles and Themes 18 | Utilizing AvaloniaUI's flexible styling system, the AvaloniaNavigationBar can be customized to meet various visual requirements, maintaining consistency with the overall design of the application. 19 | 20 | ### Getting Started 21 | #### Prerequisites 22 | - AvaloniaUI version 11.x.x or higher 23 | - .NET Core 3.1 or higher 24 | #### Installation and Execution 25 | 1. Clone this repository. 26 | ``` bash 27 | git clone [repository URL] 28 | ``` 29 | 2. Install the AvaloniaUI package. 30 | ```csharp 31 | dotnet add package Avalonia 32 | ``` 33 | 3. Build and run the application. 34 | ```csharp 35 | dotnet run 36 | ``` 37 | ### Contribution 38 | This project is open source and welcomes contributions from the community. You can contribute in various ways, including improving features, fixing bugs, or enhancing documentation. 39 | 40 | ### Enhanced Version with Page Navigation 41 | The BottomNavigationBar project now comes in an enhanced version that includes page navigation capabilities. This new version is designed to allow users to navigate within the application more efficiently, providing a more intuitive and smoother user experience. For more details about the enhanced project with page navigation features, please see [here](https://github.com/lukewire129/AvaloniaNavigationPage). 42 | 43 | ![KakaoTalk_20240118_144907899](https://lukewire129.github.io/navigationbar-avaloniaui/54387261/1d2607c2-1ad6-42f5-af75-276e03f66855) 44 | 45 | ### Collaboration 46 | We've found that this approach to development could easily work with other libraries as well, and we're eager to learn more about this exciting development that opens up the possibility of such collaboration. 47 | 48 | 49 | 50 | [here](https://github.com/AvaloniaInside/Shell) 51 | -------------------------------------------------------------------------------- /README_kor.md: -------------------------------------------------------------------------------- 1 | # AvaloniaUI AvaloniaNavigationBar Project 2 | ### Introduction 3 | 이 프로젝트는 AvaloniaUI 프레임워크를 사용하여 사용자 친화적인 AvaloniaNavigationBar를 구현한 예제입니다. AvaloniaUI는 크로스 플랫폼 데스크톱 애플리케이션 개발을 위한 강력하고 유연한 도구입니다. 이 예제에서는 ListBox 컨트롤을 사용하여 하단 내비게이션 바를 만들고, 사용자 인터페이스의 효율성과 접근성을 향상시키는 방법을 보여줍니다. 4 | 5 | ### Features 6 | - **크로스 플랫폼 지원**: Windows, Linux, macOS에서 원활하게 동작합니다. 7 | - **사용자 정의 가능**: 다양한 스타일과 테마를 적용할 수 있어, 개발자가 원하는 대로 디자인을 맞춤 설정할 수 있습니다. 8 | - **향상된 사용자 경험**: 직관적인 UI를 통해 애플리케이션의 사용성을 개선합니다. 9 | ### How It's Made 10 | #### AvaloniaUI ListBox를 사용한 구현 11 | `AvaloniaNavigationBar`는 ListBox 컨트롤을 기반으로 하며, 이는 항목을 효율적으로 표시하고 사용자 입력에 반응할 수 있게 합니다. 각 항목은 사용자가 쉽게 식별하고 선택할 수 있도록 아이콘과 텍스트로 구성됩니다. 12 | 13 | ### 스타일과 테마 14 | AvaloniaUI의 유연한 스타일링 시스템을 활용하여, `AvaloniaNavigationBar`는 다양한 시각적 요구사항을 충족할 수 있도록 사용자 정의가 가능합니다. 이를 통해 애플리케이션의 전반적인 디자인과 일관성을 유지할 수 있습니다. 15 | 16 | ### Getting Started 17 | #### 필요 조건 18 | - AvaloniaUI 11.x.x 이상 19 | - .NET Core 3.1 이상 20 | #### 설치 및 실행 21 | 1. 본 리포지토리를 클론합니다. 22 | ```bash 23 | git clone [리포지토리 URL] 24 | ``` 25 | 26 | 2. AvaloniaUI 패키지를 설치합니다. 27 | ```csharp 28 | dotnet add package Avalonia 29 | ``` 30 | 31 | 3. 애플리케이션을 빌드하고 실행합니다. 32 | ```arduino 33 | dotnet run 34 | ``` 35 | 36 | ### Contribution 37 | 이 프로젝트는 오픈소스이며, 커뮤니티의 기여를 환영합니다. 기능 개선, 버그 수정, 문서 개선 등 다양한 형태로 기여할 수 있습니다. 38 | 39 | ### Enhanced Version with Page Navigation 40 | 이제 BottomNavigationBar 프로젝트는 페이지 전환 기능을 포함하는 확장된 버전으로 제공됩니다. 이 새로운 버전은 사용자들이 애플리케이션 내에서 효율적으로 내비게이션 할 수 있도록 설계되었습니다. 이를 통해 더욱 직관적이고 매끄러운 사용자 경험을 제공합니다. 페이지 전환 기능을 포함하는 확장된 프로젝트에 대한 자세한 내용은 [여기](https://github.com/lukewire129/AvaloniaNavigationPage)에서 확인하실 수 있습니다. 41 | 42 | ![KakaoTalk_20240118_144907899](https://github.com/lukewire129/AvaloniaNavigationBar/assets/54387261/1d2607c2-1ad6-42f5-af75-276e03f66855) 43 | 44 | ### Collaboration 45 | 이러한 개발 방식이 다른 라이브러리와도 무리 없이 연동될 수 있다는 사실을 발견했습니다. 46 | 이러한 협업의 가능성을 열어주는 이 흥미로운 발전에 대해 더 알아보고 싶다. 47 | 48 | 49 | 50 | 51 | 52 | [여기](https://github.com/AvaloniaInside/Shell) 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # 디폴트 무시된 파일 2 | /shelf/ 3 | /workspace.xml 4 | # Rider에서 무시된 파일 5 | /contentModel.xml 6 | /.idea.AvaloniaNavigationBar.iml 7 | /modules.xml 8 | /projectSettingsUpdater.xml 9 | # 에디터 기반 HTTP 클라이언트 요청 10 | /httpRequests/ 11 | # Datasource local storage ignored files 12 | /dataSources/ 13 | /dataSources.local.xml 14 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/.name: -------------------------------------------------------------------------------- 1 | AvaloniaNavigationBar -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/avalonia.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 29 | 30 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/indexLayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_activity_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_annotation_annotation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_annotation_annotation_experimental.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_annotation_annotation_jvm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_appcompat_appcompat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_appcompat_appcompat_resources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_arch_core_core_common.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_arch_core_core_runtime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_collection_collection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_collection_collection_jvm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_concurrent_concurrent_futures.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_core_core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_core_core_ktx.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_core_core_splashscreen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_cursoradapter_cursoradapter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_customview_customview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_drawerlayout_drawerlayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_emoji2_emoji2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_emoji2_emoji2_views_helper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_fragment_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_interpolator_interpolator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_common.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_livedata_core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_process.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_runtime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_viewmodel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_lifecycle_lifecycle_viewmodel_savedstate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_loader_loader.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_profileinstaller_profileinstaller.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_resourceinspection_resourceinspection_annotation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_savedstate_savedstate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_startup_startup_runtime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_tracing_tracing.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_vectordrawable_vectordrawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_vectordrawable_vectordrawable_animated.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_versionedparcelable_versionedparcelable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/androidx_viewpager_viewpager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/guava_listenablefuture.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_annotations_24_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlin_kotlin_stdlib_1_9_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/libraries/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/.idea/.idea.AvaloniaNavigationBar/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.5.002.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvaloniaNavigationBar", "AvaloniaNavigationBar\AvaloniaNavigationBar.csproj", "{59B5C0FF-BB1D-4EA7-8DB5-227B87B8CD11}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demo", "Demo", "{CBA0B7EF-365A-460B-A097-CCFD5015E913}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoApp", "DemoApp\DemoApp\DemoApp.csproj", "{1E97F589-4E0E-4EFB-92B0-52C2723B9FD1}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoApp.Android", "DemoApp\DemoApp.Android\DemoApp.Android.csproj", "{ED45C1CE-C063-4D78-B332-E864601532CA}" 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoApp.Desktop", "DemoApp\DemoApp.Desktop\DemoApp.Desktop.csproj", "{51106FC7-AA8B-42CC-8A75-3F588E0C9072}" 15 | EndProject 16 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoApp.iOS", "DemoApp\DemoApp.iOS\DemoApp.iOS.csproj", "{2FEAA649-67D0-4192-9F13-1E52F2B22952}" 17 | EndProject 18 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoApp.Browser", "DemoApp\DemoApp.Browser\DemoApp.Browser.csproj", "{543F6600-8465-43FB-9DAD-E1F3AA36D436}" 19 | EndProject 20 | Global 21 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 22 | Debug|Any CPU = Debug|Any CPU 23 | Release|Any CPU = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 26 | {59B5C0FF-BB1D-4EA7-8DB5-227B87B8CD11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {59B5C0FF-BB1D-4EA7-8DB5-227B87B8CD11}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {59B5C0FF-BB1D-4EA7-8DB5-227B87B8CD11}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {59B5C0FF-BB1D-4EA7-8DB5-227B87B8CD11}.Release|Any CPU.Build.0 = Release|Any CPU 30 | {1E97F589-4E0E-4EFB-92B0-52C2723B9FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 31 | {1E97F589-4E0E-4EFB-92B0-52C2723B9FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU 32 | {1E97F589-4E0E-4EFB-92B0-52C2723B9FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {1E97F589-4E0E-4EFB-92B0-52C2723B9FD1}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {ED45C1CE-C063-4D78-B332-E864601532CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 35 | {ED45C1CE-C063-4D78-B332-E864601532CA}.Debug|Any CPU.Build.0 = Debug|Any CPU 36 | {ED45C1CE-C063-4D78-B332-E864601532CA}.Release|Any CPU.ActiveCfg = Release|Any CPU 37 | {ED45C1CE-C063-4D78-B332-E864601532CA}.Release|Any CPU.Build.0 = Release|Any CPU 38 | {51106FC7-AA8B-42CC-8A75-3F588E0C9072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 | {51106FC7-AA8B-42CC-8A75-3F588E0C9072}.Debug|Any CPU.Build.0 = Debug|Any CPU 40 | {51106FC7-AA8B-42CC-8A75-3F588E0C9072}.Release|Any CPU.ActiveCfg = Release|Any CPU 41 | {51106FC7-AA8B-42CC-8A75-3F588E0C9072}.Release|Any CPU.Build.0 = Release|Any CPU 42 | {2FEAA649-67D0-4192-9F13-1E52F2B22952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 43 | {2FEAA649-67D0-4192-9F13-1E52F2B22952}.Debug|Any CPU.Build.0 = Debug|Any CPU 44 | {2FEAA649-67D0-4192-9F13-1E52F2B22952}.Release|Any CPU.ActiveCfg = Release|Any CPU 45 | {2FEAA649-67D0-4192-9F13-1E52F2B22952}.Release|Any CPU.Build.0 = Release|Any CPU 46 | {543F6600-8465-43FB-9DAD-E1F3AA36D436}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 47 | {543F6600-8465-43FB-9DAD-E1F3AA36D436}.Debug|Any CPU.Build.0 = Debug|Any CPU 48 | {543F6600-8465-43FB-9DAD-E1F3AA36D436}.Release|Any CPU.ActiveCfg = Release|Any CPU 49 | {543F6600-8465-43FB-9DAD-E1F3AA36D436}.Release|Any CPU.Build.0 = Release|Any CPU 50 | EndGlobalSection 51 | GlobalSection(SolutionProperties) = preSolution 52 | HideSolutionNode = FALSE 53 | EndGlobalSection 54 | GlobalSection(ExtensibilityGlobals) = postSolution 55 | SolutionGuid = {1785F88D-8135-46E6-A6FD-9A6F1B604570} 56 | EndGlobalSection 57 | GlobalSection(NestedProjects) = preSolution 58 | {1E97F589-4E0E-4EFB-92B0-52C2723B9FD1} = {CBA0B7EF-365A-460B-A097-CCFD5015E913} 59 | {ED45C1CE-C063-4D78-B332-E864601532CA} = {CBA0B7EF-365A-460B-A097-CCFD5015E913} 60 | {51106FC7-AA8B-42CC-8A75-3F588E0C9072} = {CBA0B7EF-365A-460B-A097-CCFD5015E913} 61 | {2FEAA649-67D0-4192-9F13-1E52F2B22952} = {CBA0B7EF-365A-460B-A097-CCFD5015E913} 62 | {543F6600-8465-43FB-9DAD-E1F3AA36D436} = {CBA0B7EF-365A-460B-A097-CCFD5015E913} 63 | EndGlobalSection 64 | EndGlobal 65 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/AvaloniaNavigationBar.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net8.0 4 | enable 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | MagicBar.axaml 21 | Code 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Interface/INavigationAdapter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace AvaloniaNavigationBar.Interface; 4 | 5 | public interface INavigationAdapter 6 | { 7 | Action ChangedSelectedIndex { get; set; } 8 | } -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/BottomNavigatorBarStyle2.axaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 35 | 36 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/BottomNavigatorBarStyle2.axaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia.Controls; 3 | using Avalonia.Controls.Primitives; 4 | using Avalonia.Controls.Shapes; 5 | using AvaloniaNavigationBar.Interface; 6 | 7 | namespace AvaloniaNavigationBar.Style; 8 | 9 | public class BottomNavigatorBarStyle2 : ListBox,INavigationAdapter 10 | { 11 | public BottomNavigatorBarStyle2() 12 | { 13 | this.SelectionChanged += (sender, args) => 14 | { 15 | int idx = SelectedIndex; 16 | Canvas.SetLeft(_circle, idx * 80); 17 | this.ChangedSelectedIndex?.Invoke(idx); 18 | }; 19 | } 20 | 21 | private Ellipse _circle; 22 | protected override void OnApplyTemplate(TemplateAppliedEventArgs e) 23 | { 24 | base.OnApplyTemplate(e); 25 | 26 | _circle = e.NameScope.Get("PART_Circle"); 27 | this.SelectedIndex = 0; 28 | } 29 | 30 | public Action ChangedSelectedIndex { get; set; } 31 | } -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/BottomNavigatorBarStyle2Item.axaml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 41 | 45 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/BottomNavigatorBarStyle2Item.axaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia; 3 | using Avalonia.Controls; 4 | using Avalonia.Data; 5 | using Material.Icons; 6 | using Material.Icons.Avalonia; 7 | 8 | namespace AvaloniaNavigationBar.Style; 9 | 10 | public class BottomNavigatorBarStyle2Item : ListBoxItem 11 | { 12 | public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof (Kind), MaterialIconKind.Abacus, false, BindingMode.OneWay, (Func) null, (Func) null, false); 13 | 14 | public MaterialIconKind Kind 15 | { 16 | get => this.GetValue(BottomNavigatorBarStyle2Item.KindProperty); 17 | set 18 | { 19 | this.SetValue(BottomNavigatorBarStyle2Item.KindProperty, value, BindingPriority.LocalValue); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/MagicBar.axaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | M0,0 L100,0 C95.167503,0 91.135628,3.4278221 90.203163,7.9846497 L90.152122,8.2704506 89.963921,9.1416779 C85.813438,27.384438 69.496498,41 50,41 30.5035,41 14.186564,27.384438 10.036079,9.1416779 L9.8478823,8.2704926 9.7968359,7.9846497 C8.8643732,3.4278221 4.8324914,0,0,0 z 8 | 9 | M3,12V6.75L9,5.43V11.91L3,12M20,3V11.75L10,11.9V5.21L20,3M3,13L9,13.09V19.9L3,18.75V13M20,13.25V22L10,20.09V13.1L20,13.25Z 10 | M18.71,19.5C17.88,20.74 17,21.95 15.66,21.97C14.32,22 13.89,21.18 12.37,21.18C10.84,21.18 10.37,21.95 9.1,22C7.79,22.05 6.8,20.68 5.96,19.47C4.25,17 2.94,12.45 4.7,9.39C5.57,7.87 7.13,6.91 8.82,6.88C10.1,6.86 11.32,7.75 12.11,7.75C12.89,7.75 14.37,6.68 15.92,6.84C16.57,6.87 18.39,7.1 19.56,8.82C19.47,8.88 17.39,10.1 17.41,12.63C17.44,15.65 20.06,16.66 20.09,16.67C20.06,16.74 19.67,18.11 18.71,19.5M13,3.5C13.73,2.67 14.94,2.04 15.94,2C16.07,3.17 15.6,4.35 14.9,5.19C14.21,6.04 13.07,6.7 11.95,6.61C11.8,5.46 12.36,4.26 13,3.5Z 11 | M21.35,11.1H12.18V13.83H18.69C18.36,17.64 15.19,19.27 12.19,19.27C8.36,19.27 5,16.25 5,12C5,7.9 8.2,4.73 12.2,4.73C15.29,4.73 17.1,6.7 17.1,6.7L19,4.72C19,4.72 16.56,2 12.1,2C6.42,2 2.03,6.8 2.03,12C2.03,17.05 6.16,22 12.25,22C17.6,22 21.5,18.33 21.5,12.91C21.5,11.76 21.35,11.1 21.35,11.1V11.1Z 12 | M12 2.04C6.5 2.04 2 6.53 2 12.06C2 17.06 5.66 21.21 10.44 21.96V14.96H7.9V12.06H10.44V9.85C10.44 7.34 11.93 5.96 14.22 5.96C15.31 5.96 16.45 6.15 16.45 6.15V8.62H15.19C13.95 8.62 13.56 9.39 13.56 10.18V12.06H16.34L15.89 14.96H13.56V21.96A10 10 0 0 0 22 12.06C22 6.53 17.5 2.04 12 2.04Z 13 | M7.8,2H16.2C19.4,2 22,4.6 22,7.8V16.2A5.8,5.8 0 0,1 16.2,22H7.8C4.6,22 2,19.4 2,16.2V7.8A5.8,5.8 0 0,1 7.8,2M7.6,4A3.6,3.6 0 0,0 4,7.6V16.4C4,18.39 5.61,20 7.6,20H16.4A3.6,3.6 0 0,0 20,16.4V7.6C20,5.61 18.39,4 16.4,4H7.6M17.25,5.5A1.25,1.25 0 0,1 18.5,6.75A1.25,1.25 0 0,1 17.25,8A1.25,1.25 0 0,1 16,6.75A1.25,1.25 0 0,1 17.25,5.5M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9Z 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 41 | 51 | 65 | 69 | 72 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 123 | 133 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/MagicBar.axaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia.Controls; 3 | using Avalonia.Controls.Primitives; 4 | using AvaloniaNavigationBar.Interface; 5 | 6 | namespace AvaloniaNavigationBar.Style; 7 | 8 | public class MagicBar : Navibar 9 | { 10 | static MagicBar() 11 | { 12 | } 13 | public MagicBar() 14 | { 15 | this.SelectionChanged += (sender, args) => 16 | { 17 | int idx = SelectedIndex; 18 | Canvas.SetLeft(_circle, idx * 80); 19 | this.ChangedSelectedIndex?.Invoke(idx); 20 | }; 21 | } 22 | 23 | private Grid _circle; 24 | protected override void OnApplyTemplate(TemplateAppliedEventArgs e) 25 | { 26 | base.OnApplyTemplate(e); 27 | 28 | _circle = e.NameScope.Get("PART_Circle"); 29 | this.SelectedIndex = 0; 30 | } 31 | } -------------------------------------------------------------------------------- /src/AvaloniaNavigationBar/Style/Navibar.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia.Controls; 3 | using AvaloniaNavigationBar.Interface; 4 | 5 | namespace AvaloniaNavigationBar.Style; 6 | 7 | public class Navibar : ListBox, INavigationAdapter 8 | { 9 | public Action ChangedSelectedIndex { get; set; } 10 | } -------------------------------------------------------------------------------- /src/DemoApp/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # Tye 66 | .tye/ 67 | 68 | # ASP.NET Scaffolding 69 | ScaffoldingReadMe.txt 70 | 71 | # StyleCop 72 | StyleCopReport.xml 73 | 74 | # Files built by Visual Studio 75 | *_i.c 76 | *_p.c 77 | *_h.h 78 | *.ilk 79 | *.meta 80 | *.obj 81 | *.iobj 82 | *.pch 83 | *.pdb 84 | *.ipdb 85 | *.pgc 86 | *.pgd 87 | *.rsp 88 | *.sbr 89 | *.tlb 90 | *.tli 91 | *.tlh 92 | *.tmp 93 | *.tmp_proj 94 | *_wpftmp.csproj 95 | *.log 96 | *.vspscc 97 | *.vssscc 98 | .builds 99 | *.pidb 100 | *.svclog 101 | *.scc 102 | 103 | # Chutzpah Test files 104 | _Chutzpah* 105 | 106 | # Visual C++ cache files 107 | ipch/ 108 | *.aps 109 | *.ncb 110 | *.opendb 111 | *.opensdf 112 | *.sdf 113 | *.cachefile 114 | *.VC.db 115 | *.VC.VC.opendb 116 | 117 | # Visual Studio profiler 118 | *.psess 119 | *.vsp 120 | *.vspx 121 | *.sap 122 | 123 | # Visual Studio Trace Files 124 | *.e2e 125 | 126 | # TFS 2012 Local Workspace 127 | $tf/ 128 | 129 | # Guidance Automation Toolkit 130 | *.gpState 131 | 132 | # ReSharper is a .NET coding add-in 133 | _ReSharper*/ 134 | *.[Rr]e[Ss]harper 135 | *.DotSettings.user 136 | 137 | # TeamCity is a build add-in 138 | _TeamCity* 139 | 140 | # DotCover is a Code Coverage Tool 141 | *.dotCover 142 | 143 | # AxoCover is a Code Coverage Tool 144 | .axoCover/* 145 | !.axoCover/settings.json 146 | 147 | # Coverlet is a free, cross platform Code Coverage Tool 148 | coverage*.json 149 | coverage*.xml 150 | coverage*.info 151 | 152 | # Visual Studio code coverage results 153 | *.coverage 154 | *.coveragexml 155 | 156 | # NCrunch 157 | _NCrunch_* 158 | .*crunch*.local.xml 159 | nCrunchTemp_* 160 | 161 | # MightyMoose 162 | *.mm.* 163 | AutoTest.Net/ 164 | 165 | # Web workbench (sass) 166 | .sass-cache/ 167 | 168 | # Installshield output folder 169 | [Ee]xpress/ 170 | 171 | # DocProject is a documentation generator add-in 172 | DocProject/buildhelp/ 173 | DocProject/Help/*.HxT 174 | DocProject/Help/*.HxC 175 | DocProject/Help/*.hhc 176 | DocProject/Help/*.hhk 177 | DocProject/Help/*.hhp 178 | DocProject/Help/Html2 179 | DocProject/Help/html 180 | 181 | # Click-Once directory 182 | publish/ 183 | 184 | # Publish Web Output 185 | *.[Pp]ublish.xml 186 | *.azurePubxml 187 | # Note: Comment the next line if you want to checkin your web deploy settings, 188 | # but database connection strings (with potential passwords) will be unencrypted 189 | *.pubxml 190 | *.publishproj 191 | 192 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 193 | # checkin your Azure Web App publish settings, but sensitive information contained 194 | # in these scripts will be unencrypted 195 | PublishScripts/ 196 | 197 | # NuGet Packages 198 | *.nupkg 199 | # NuGet Symbol Packages 200 | *.snupkg 201 | # The packages folder can be ignored because of Package Restore 202 | **/[Pp]ackages/* 203 | # except build/, which is used as an MSBuild target. 204 | !**/[Pp]ackages/build/ 205 | # Uncomment if necessary however generally it will be regenerated when needed 206 | #!**/[Pp]ackages/repositories.config 207 | # NuGet v3's project.json files produces more ignorable files 208 | *.nuget.props 209 | *.nuget.targets 210 | 211 | # Microsoft Azure Build Output 212 | csx/ 213 | *.build.csdef 214 | 215 | # Microsoft Azure Emulator 216 | ecf/ 217 | rcf/ 218 | 219 | # Windows Store app package directories and files 220 | AppPackages/ 221 | BundleArtifacts/ 222 | Package.StoreAssociation.xml 223 | _pkginfo.txt 224 | *.appx 225 | *.appxbundle 226 | *.appxupload 227 | 228 | # Visual Studio cache files 229 | # files ending in .cache can be ignored 230 | *.[Cc]ache 231 | # but keep track of directories ending in .cache 232 | !?*.[Cc]ache/ 233 | 234 | # Others 235 | ClientBin/ 236 | ~$* 237 | *~ 238 | *.dbmdl 239 | *.dbproj.schemaview 240 | *.jfm 241 | *.pfx 242 | *.publishsettings 243 | orleans.codegen.cs 244 | 245 | # Including strong name files can present a security risk 246 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 247 | #*.snk 248 | 249 | # Since there are multiple workflows, uncomment next line to ignore bower_components 250 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 251 | #bower_components/ 252 | 253 | # RIA/Silverlight projects 254 | Generated_Code/ 255 | 256 | # Backup & report files from converting an old project file 257 | # to a newer Visual Studio version. Backup files are not needed, 258 | # because we have git ;-) 259 | _UpgradeReport_Files/ 260 | Backup*/ 261 | UpgradeLog*.XML 262 | UpgradeLog*.htm 263 | ServiceFabricBackup/ 264 | *.rptproj.bak 265 | 266 | # SQL Server files 267 | *.mdf 268 | *.ldf 269 | *.ndf 270 | 271 | # Business Intelligence projects 272 | *.rdl.data 273 | *.bim.layout 274 | *.bim_*.settings 275 | *.rptproj.rsuser 276 | *- [Bb]ackup.rdl 277 | *- [Bb]ackup ([0-9]).rdl 278 | *- [Bb]ackup ([0-9][0-9]).rdl 279 | 280 | # Microsoft Fakes 281 | FakesAssemblies/ 282 | 283 | # GhostDoc plugin setting file 284 | *.GhostDoc.xml 285 | 286 | # Node.js Tools for Visual Studio 287 | .ntvs_analysis.dat 288 | node_modules/ 289 | 290 | # Visual Studio 6 build log 291 | *.plg 292 | 293 | # Visual Studio 6 workspace options file 294 | *.opt 295 | 296 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 297 | *.vbw 298 | 299 | # Visual Studio LightSwitch build output 300 | **/*.HTMLClient/GeneratedArtifacts 301 | **/*.DesktopClient/GeneratedArtifacts 302 | **/*.DesktopClient/ModelManifest.xml 303 | **/*.Server/GeneratedArtifacts 304 | **/*.Server/ModelManifest.xml 305 | _Pvt_Extensions 306 | 307 | # Paket dependency manager 308 | .paket/paket.exe 309 | paket-files/ 310 | 311 | # FAKE - F# Make 312 | .fake/ 313 | 314 | # CodeRush personal settings 315 | .cr/personal 316 | 317 | # Python Tools for Visual Studio (PTVS) 318 | __pycache__/ 319 | *.pyc 320 | 321 | # Cake - Uncomment if you are using it 322 | # tools/** 323 | # !tools/packages.config 324 | 325 | # Tabs Studio 326 | *.tss 327 | 328 | # Telerik's JustMock configuration file 329 | *.jmconfig 330 | 331 | # BizTalk build output 332 | *.btp.cs 333 | *.btm.cs 334 | *.odx.cs 335 | *.xsd.cs 336 | 337 | # OpenCover UI analysis results 338 | OpenCover/ 339 | 340 | # Azure Stream Analytics local run output 341 | ASALocalRun/ 342 | 343 | # MSBuild Binary and Structured Log 344 | *.binlog 345 | 346 | # NVidia Nsight GPU debugger configuration file 347 | *.nvuser 348 | 349 | # MFractors (Xamarin productivity tool) working folder 350 | .mfractor/ 351 | 352 | # Local History for Visual Studio 353 | .localhistory/ 354 | 355 | # BeatPulse healthcheck temp database 356 | healthchecksdb 357 | 358 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 359 | MigrationBackup/ 360 | 361 | # Ionide (cross platform F# VS Code tools) working folder 362 | .ionide/ 363 | 364 | # Fody - auto-generated XML schema 365 | FodyWeavers.xsd 366 | 367 | ## 368 | ## Visual studio for Mac 369 | ## 370 | 371 | 372 | # globs 373 | Makefile.in 374 | *.userprefs 375 | *.usertasks 376 | config.make 377 | config.status 378 | aclocal.m4 379 | install-sh 380 | autom4te.cache/ 381 | *.tar.gz 382 | tarballs/ 383 | test-results/ 384 | 385 | # Mac bundle stuff 386 | *.dmg 387 | *.app 388 | 389 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore 390 | # General 391 | .DS_Store 392 | .AppleDouble 393 | .LSOverride 394 | 395 | # Icon must end with two \r 396 | Icon 397 | 398 | 399 | # Thumbnails 400 | ._* 401 | 402 | # Files that might appear in the root of a volume 403 | .DocumentRevisions-V100 404 | .fseventsd 405 | .Spotlight-V100 406 | .TemporaryItems 407 | .Trashes 408 | .VolumeIcon.icns 409 | .com.apple.timemachine.donotpresent 410 | 411 | # Directories potentially created on remote AFP share 412 | .AppleDB 413 | .AppleDesktop 414 | Network Trash Folder 415 | Temporary Items 416 | .apdisk 417 | 418 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore 419 | # Windows thumbnail cache files 420 | Thumbs.db 421 | ehthumbs.db 422 | ehthumbs_vista.db 423 | 424 | # Dump file 425 | *.stackdump 426 | 427 | # Folder config file 428 | [Dd]esktop.ini 429 | 430 | # Recycle Bin used on file shares 431 | $RECYCLE.BIN/ 432 | 433 | # Windows Installer files 434 | *.cab 435 | *.msi 436 | *.msix 437 | *.msm 438 | *.msp 439 | 440 | # Windows shortcuts 441 | *.lnk 442 | 443 | # JetBrains Rider 444 | .idea/ 445 | *.sln.iml 446 | 447 | ## 448 | ## Visual Studio Code 449 | ## 450 | .vscode/* 451 | !.vscode/settings.json 452 | !.vscode/tasks.json 453 | !.vscode/launch.json 454 | !.vscode/extensions.json 455 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/DemoApp.Android.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | Exe 4 | net8.0-android 5 | 21 6 | enable 7 | com.CompanyName.DemoApp 8 | 1 9 | 1.0 10 | apk 11 | false 12 | 13 | 14 | 15 | 16 | Resources\drawable\Icon.png 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukewire129/navigationbar-avaloniaui/f6fbffbcfc003d173e77d6aaf968e6ab0b29f35f/src/DemoApp/DemoApp.Android/Icon.png -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/MainActivity.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Content.PM; 3 | using Avalonia; 4 | using Avalonia.Android; 5 | 6 | namespace DemoApp.Android; 7 | 8 | [Activity( 9 | Label = "DemoApp.Android", 10 | Theme = "@style/MyTheme.NoActionBar", 11 | Icon = "@drawable/icon", 12 | MainLauncher = true, 13 | ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)] 14 | public class MainActivity : AvaloniaMainActivity 15 | { 16 | protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) 17 | { 18 | return base.CustomizeAppBuilder(builder) 19 | .WithInterFont(); 20 | } 21 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/AboutResources.txt: -------------------------------------------------------------------------------- 1 | Images, layout descriptions, binary blobs and string dictionaries can be included 2 | in your application as resource files. Various Android APIs are designed to 3 | operate on the resource IDs instead of dealing with images, strings or binary blobs 4 | directly. 5 | 6 | For example, a sample Android app that contains a user interface layout (main.axml), 7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) 8 | would keep its resources in the "Resources" directory of the application: 9 | 10 | Resources/ 11 | drawable/ 12 | icon.png 13 | 14 | layout/ 15 | main.axml 16 | 17 | values/ 18 | strings.xml 19 | 20 | In order to get the build system to recognize Android resources, set the build action to 21 | "AndroidResource". The native Android APIs do not operate directly with filenames, but 22 | instead operate on resource IDs. When you compile an Android application that uses resources, 23 | the build system will package the resources for distribution and generate a class called "R" 24 | (this is an Android convention) that contains the tokens for each one of the resources 25 | included. For example, for the above Resources layout, this is what the R class would expose: 26 | 27 | public class R { 28 | public class drawable { 29 | public const int icon = 0x123; 30 | } 31 | 32 | public class layout { 33 | public const int main = 0x456; 34 | } 35 | 36 | public class strings { 37 | public const int first_string = 0xabc; 38 | public const int second_string = 0xbcd; 39 | } 40 | } 41 | 42 | You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main 43 | to reference the layout/main.axml file, or R.strings.first_string to reference the first 44 | string in the dictionary file values/strings.xml. -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/drawable-night-v31/avalonia_anim.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 15 | 16 | 20 | 25 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 55 | 56 | 57 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/drawable-v31/avalonia_anim.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 15 | 16 | 21 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 46 | 47 | 48 | 49 | 50 | 57 | 58 | 59 | 60 | 61 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/values-night/colors.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | #212121 4 | 5 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 17 | 21 | 22 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | #FFFFFF 4 | 5 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/DemoApp.Browser.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net8.0-browser 4 | Exe 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/Program.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | using System.Threading.Tasks; 3 | using Avalonia; 4 | using Avalonia.Browser; 5 | using DemoApp; 6 | 7 | [assembly: SupportedOSPlatform("browser")] 8 | 9 | internal sealed partial class Program 10 | { 11 | private static Task Main(string[] args) => BuildAvaloniaApp() 12 | .WithInterFont() 13 | .StartBrowserAppAsync("out"); 14 | 15 | public static AppBuilder BuildAvaloniaApp() 16 | => AppBuilder.Configure(); 17 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | [assembly: System.Runtime.Versioning.SupportedOSPlatform("browser")] -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "DemoApp.Browser": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "https://localhost:7169;http://localhost:5235", 10 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "wasmHostProperties": { 3 | "perHostConfig": [ 4 | { 5 | "name": "browser", 6 | "host": "browser" 7 | } 8 | ] 9 | } 10 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/wwwroot/app.css: -------------------------------------------------------------------------------- 1 | /* HTML styles for the splash screen */ 2 | .avalonia-splash { 3 | position: absolute; 4 | height: 100%; 5 | width: 100%; 6 | background: white; 7 | font-family: 'Outfit', sans-serif; 8 | justify-content: center; 9 | align-items: center; 10 | display: flex; 11 | pointer-events: none; 12 | } 13 | 14 | /* Light theme styles */ 15 | @media (prefers-color-scheme: light) { 16 | .avalonia-splash { 17 | background: white; 18 | } 19 | 20 | .avalonia-splash h2 { 21 | color: #1b2a4e; 22 | } 23 | 24 | .avalonia-splash a { 25 | color: #0D6EFD; 26 | } 27 | } 28 | 29 | @media (prefers-color-scheme: dark) { 30 | .avalonia-splash { 31 | background: #1b2a4e; 32 | } 33 | 34 | .avalonia-splash h2 { 35 | color: white; 36 | } 37 | 38 | .avalonia-splash a { 39 | color: white; 40 | } 41 | } 42 | 43 | .avalonia-splash h2 { 44 | font-weight: 400; 45 | font-size: 1.5rem; 46 | } 47 | 48 | .avalonia-splash a { 49 | text-decoration: none; 50 | font-size: 2.5rem; 51 | display: block; 52 | } 53 | 54 | .avalonia-splash.splash-close { 55 | transition: opacity 200ms, display 200ms; 56 | display: none; 57 | opacity: 0; 58 | } 59 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukewire129/navigationbar-avaloniaui/f6fbffbcfc003d173e77d6aaf968e6ab0b29f35f/src/DemoApp/DemoApp.Browser/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/wwwroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DemoApp.Browser 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 32 |
33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Browser/wwwroot/main.js: -------------------------------------------------------------------------------- 1 | import { dotnet } from './_framework/dotnet.js' 2 | 3 | const is_browser = typeof window != "undefined"; 4 | if (!is_browser) throw new Error(`Expected to be running in a browser`); 5 | 6 | const dotnetRuntime = await dotnet 7 | .withDiagnosticTracing(false) 8 | .withApplicationArgumentsFromQuery() 9 | .create(); 10 | 11 | const config = dotnetRuntime.getConfig(); 12 | 13 | await dotnetRuntime.runMain(config.mainAssemblyName, [globalThis.location.href]); 14 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Desktop/DemoApp.Desktop.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | WinExe 4 | 6 | net8.0 7 | enable 8 | true 9 | 10 | 11 | 12 | app.manifest 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Desktop/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia; 3 | 4 | namespace DemoApp.Desktop; 5 | 6 | sealed class Program 7 | { 8 | // Initialization code. Don't use any Avalonia, third-party APIs or any 9 | // SynchronizationContext-reliant code before AppMain is called: things aren't initialized 10 | // yet and stuff might break. 11 | [STAThread] 12 | public static void Main(string[] args) => BuildAvaloniaApp() 13 | .StartWithClassicDesktopLifetime(args); 14 | 15 | // Avalonia configuration, don't remove; also used by visual designer. 16 | public static AppBuilder BuildAvaloniaApp() 17 | => AppBuilder.Configure() 18 | .UsePlatformDetect() 19 | .WithInterFont() 20 | .LogToTrace(); 21 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.Desktop/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | using UIKit; 3 | using Avalonia; 4 | using Avalonia.Controls; 5 | using Avalonia.iOS; 6 | using Avalonia.Media; 7 | 8 | namespace DemoApp.iOS; 9 | 10 | // The UIApplicationDelegate for the application. This class is responsible for launching the 11 | // User Interface of the application, as well as listening (and optionally responding) to 12 | // application events from iOS. 13 | [Register("AppDelegate")] 14 | #pragma warning disable CA1711 // Identifiers should not have incorrect suffix 15 | public partial class AppDelegate : AvaloniaAppDelegate 16 | #pragma warning restore CA1711 // Identifiers should not have incorrect suffix 17 | { 18 | protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) 19 | { 20 | return base.CustomizeAppBuilder(builder) 21 | .WithInterFont(); 22 | } 23 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/DemoApp.iOS.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Exe 4 | net8.0-ios 5 | 13.0 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDisplayName 6 | DemoApp 7 | CFBundleIdentifier 8 | companyName.DemoApp 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 1.0 13 | LSRequiresIPhoneOS 14 | 15 | MinimumOSVersion 16 | 13.0 17 | UIDeviceFamily 18 | 19 | 1 20 | 2 21 | 22 | UILaunchStoryboardName 23 | LaunchScreen 24 | UIRequiredDeviceCapabilities 25 | 26 | armv7 27 | 28 | UISupportedInterfaceOrientations 29 | 30 | UIInterfaceOrientationPortrait 31 | UIInterfaceOrientationPortraitUpsideDown 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | 3 | namespace DemoApp.iOS; 4 | 5 | public class Application 6 | { 7 | // This is the main entry point of the application. 8 | static void Main(string[] args) 9 | { 10 | // if you want to use a different Application Delegate class from "AppDelegate" 11 | // you can specify it here. 12 | UIApplication.Main(args, null, typeof(AppDelegate)); 13 | } 14 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.iOS/Resources/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.3.32811.315 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoApp", "DemoApp\DemoApp.csproj", "{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoApp.Desktop", "DemoApp.Desktop\DemoApp.Desktop.csproj", "{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoApp.Browser", "DemoApp.Browser\DemoApp.Browser.csproj", "{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}" 11 | EndProject 12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoApp.iOS", "DemoApp.iOS\DemoApp.iOS.csproj", "{EBD9022F-BC83-4846-9A11-6F7F3772DC64}" 13 | EndProject 14 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DemoApp.Android", "DemoApp.Android\DemoApp.Android.csproj", "{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}" 15 | EndProject 16 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3DA99C4E-89E3-4049-9C22-0A7EC60D83D8}" 17 | ProjectSection(SolutionItems) = preProject 18 | Directory.Build.props = Directory.Build.props 19 | EndProjectSection 20 | EndProject 21 | Global 22 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 23 | Debug|Any CPU = Debug|Any CPU 24 | Release|Any CPU = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 27 | {EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.Build.0 = Release|Any CPU 31 | {ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 32 | {ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.Build.0 = Debug|Any CPU 33 | {ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.ActiveCfg = Release|Any CPU 34 | {ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.Build.0 = Release|Any CPU 35 | {1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 36 | {1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU 37 | {1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU 38 | {1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.Build.0 = Release|Any CPU 39 | {EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 40 | {EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Debug|Any CPU.Build.0 = Debug|Any CPU 41 | {EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Release|Any CPU.ActiveCfg = Release|Any CPU 42 | {EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Release|Any CPU.Build.0 = Release|Any CPU 43 | {7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 44 | {7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Debug|Any CPU.Build.0 = Debug|Any CPU 45 | {7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Release|Any CPU.ActiveCfg = Release|Any CPU 46 | {7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Release|Any CPU.Build.0 = Release|Any CPU 47 | EndGlobalSection 48 | GlobalSection(SolutionProperties) = preSolution 49 | HideSolutionNode = FALSE 50 | EndGlobalSection 51 | GlobalSection(ExtensibilityGlobals) = postSolution 52 | SolutionGuid = {83CB65B8-011F-4ED7-BCD3-A6CFA935EF7E} 53 | EndGlobalSection 54 | EndGlobal 55 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/App.axaml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/App.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia; 2 | using Avalonia.Controls.ApplicationLifetimes; 3 | using Avalonia.Data.Core; 4 | using Avalonia.Data.Core.Plugins; 5 | using Avalonia.Markup.Xaml; 6 | using DemoApp.ViewModels; 7 | using DemoApp.Views; 8 | 9 | namespace DemoApp; 10 | 11 | public partial class App : Application 12 | { 13 | public override void Initialize() 14 | { 15 | AvaloniaXamlLoader.Load(this); 16 | } 17 | 18 | public override void OnFrameworkInitializationCompleted() 19 | { 20 | if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) 21 | { 22 | // Line below is needed to remove Avalonia data validation. 23 | // Without this line you will get duplicate validations from both Avalonia and CT 24 | BindingPlugins.DataValidators.RemoveAt(0); 25 | desktop.MainWindow = new MainWindow 26 | { 27 | DataContext = new MainViewModel() 28 | }; 29 | } 30 | else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform) 31 | { 32 | singleViewPlatform.MainView = new MainView 33 | { 34 | DataContext = new MainViewModel() 35 | }; 36 | } 37 | 38 | base.OnFrameworkInitializationCompleted(); 39 | } 40 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Assets/avalonia-logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukewire129/navigationbar-avaloniaui/f6fbffbcfc003d173e77d6aaf968e6ab0b29f35f/src/DemoApp/DemoApp/Assets/avalonia-logo.ico -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/DemoApp.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net8.0 4 | enable 5 | latest 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | BottomNavigatorBoarStyle2Page.axaml 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/ViewModels/MainViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace DemoApp.ViewModels; 4 | 5 | public partial class MainViewModel : ViewModelBase 6 | { 7 | [ObservableProperty] private string _greeting = "Welcome to Avalonia!"; 8 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/ViewModels/ViewModelBase.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | 3 | namespace DemoApp.ViewModels; 4 | 5 | public abstract class ViewModelBase : ObservableObject 6 | { 7 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/BottomNavigatorBoarStyle2Page.axaml: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/BottomNavigatorBoarStyle2Page.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia; 2 | using Avalonia.Controls; 3 | using Avalonia.Markup.Xaml; 4 | 5 | namespace DemoApp.Views; 6 | 7 | public partial class BottomNavigatorBoarStyle2Page : UserControl 8 | { 9 | public BottomNavigatorBoarStyle2Page() 10 | { 11 | InitializeComponent(); 12 | } 13 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MagicBarSamplePage.axaml: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MagicBarSamplePage.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia; 2 | using Avalonia.Controls; 3 | using Avalonia.Markup.Xaml; 4 | 5 | namespace DemoApp.Views; 6 | 7 | public partial class MagicBarSamplePage : UserControl 8 | { 9 | public MagicBarSamplePage() 10 | { 11 | InitializeComponent(); 12 | } 13 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MainView.axaml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MainView.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia.Controls; 2 | 3 | namespace DemoApp.Views; 4 | 5 | public partial class MainView : UserControl 6 | { 7 | public MainView() 8 | { 9 | InitializeComponent(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MainWindow.axaml: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/DemoApp/DemoApp/Views/MainWindow.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia.Controls; 2 | 3 | namespace DemoApp.Views; 4 | 5 | public partial class MainWindow : Window 6 | { 7 | public MainWindow() 8 | { 9 | InitializeComponent(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/DemoApp/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | enable 4 | 11.1.0 5 | 6 | 7 | --------------------------------------------------------------------------------