.NET MAUI에서 TabBar 또는 SegmentedControl 만들기
6302 단어 dotnetdotnetmauiprogramming
내가 사용한 것:
처음 두 개의 "컨트롤"은 실제로 솔루션의 핵심입니다. 나머지는 레이아웃/디자인에 필요합니다.
RadioButton
BindableLayout
HorizontalStackLayout
Grid
- 아마도 나는 VerticalStackLayout
를 사용할 수 있었지만 Grid
는 나에게 큰 유연성을 제공합니다 Label
BoxView
- 부모 컨테이너에 크기를 조정해야 하는 선이나 상자를 페인팅하기 위한 이 간단한 컨트롤이 마음에 듭니다코드
1 - 각 탭에 대해 반복할 데이터 집합으로 컨테이너를 만들었습니다.
<HorizontalStackLayout>
<BindableLayout.ItemTemplate>
<!-- Views Here -->
</BindableLayout.ItemTemplate>
<BindableLayout.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Hot Dishes</x:String>
<x:String>Cold Dishes</x:String>
<x:String>Soups</x:String>
<x:String>Appetizers</x:String>
<x:String>Desserts</x:String>
</x:Array>
</BindableLayout.ItemsSource>
</HorizontalStackLayout>
2 -
RadioButton
를 표시하는 항목 템플릿을 만들었습니다.<BindableLayout.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding .}" />
</DataTemplate>
</BindableLayout.ItemTemplate>
이것을 그룹화된 라디오 목록으로 만들기 위해 상위 레이아웃에 이름을 추가했습니다.
<HorizontalStackLayout
RadioButtonGroup.GroupName="MenuCategories">
3 -
RadioButton
를 사용하여 ControlTemplate
스타일을 지정했습니다.<RadioButton Content="{Binding .}">
<RadioButton.ControlTemplate>
<ControlTemplate>
<Grid RowDefinitions="30,4">
<Label Text="{TemplateBinding Content}" />
<BoxView Grid.Row="1" Color="Transparent"/>
</Grid>
</ControlTemplate>
</RadioButton.ControlTemplate>
</RadioButton>
컨트롤 템플릿 안에 있기 때문에
Binding
를 사용하는 대신 TemplateBinding
를 사용합니다. Content
는 무엇이든 될 수 있지만 String
를 제공했으므로 레이블 텍스트에 직접 바인딩하는 것이 안전해 보입니다.4 - 선택된 것과 선택되지 않은 것에 대해 다른 모양을 얻으려면, 나는:
VisualStateManager
(VSM) 추가<ControlTemplate>
<Grid RowDefinitions="30,4">
<VisualStateManager.VisualStateGroups>
<VisualStateGroupList>
<VisualStateGroup x:Name="CheckedStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter
TargetName="TextLabel"
Property="Label.TextColor"
Value="{StaticResource Primary}"/>
<Setter
TargetName="Indicator"
Property="BoxView.Color"
Value="{StaticResource Primary}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Unchecked">
<VisualState.Setters>
<Setter
TargetName="TextLabel"
Property="Label.TextColor"
Value="White"/>
<Setter
TargetName="Indicator"
Property="BoxView.Color"
Value="Transparent"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</VisualStateManager.VisualStateGroups>
<Label Text="{TemplateBinding Content}" x:Name="TextLabel" />
<BoxView x:Name="Indicator" Grid.Row="1" Color="Transparent"/>
</Grid>
</ControlTemplate>
결론
그게 다야. 이 예제에는 매우 쉽게 구현할 수 있는 유용한 개념이 많이 있습니다. .NET MAUI에서 사용할 수 있는 새로운 기능을 하나 이상 배웠으면 합니다.
Reference
이 문제에 관하여(.NET MAUI에서 TabBar 또는 SegmentedControl 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/davidortinau/making-a-tabbar-or-segmentedcontrol-in-net-maui-54ha텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)