Xamarin.Forms RadioButton
, Xamarin.FormsRadioButton Kullanıcıların bir kümeden bir seçenek seçmesini sağlayan bir düğme türüdür. Her seçenek tek bir radyo düğmesi ile temsil edilir ve bir grupta yalnızca bir radyo düğmesi seçebilirsiniz. Varsayılan olarak, her biri RadioButton metin görüntüler:
RadioButtons ekran görüntüsü
Ancak bazı platformlarda a bir RadioButtonView ve tüm platformlarda, her birinin görünümü RadioButton bir ile yeniden tanımlanabilir ControlTemplate :
Yeniden yeniden
RadioButtonDenetim aşağıdaki özellikleri tanımlar:
Content,objectstringtarafından görüntülenecek veya öğesini tanımlayan türüViewRadioButton.IsChecked, öğesininboolişaretli olup olmadığını tanımlayan türüRadioButton. Bu özellik birTwoWaybağlama kullanır ve varsayılan değerine sahiptirfalse.GroupName,stringhangi denetimlerin birbirini dışlamadığını belirten adı tanımlayan türüRadioButton. Bu özelliğin varsayılan değeri vardırnull.Value,,objectile ilişkili bir isteğe bağlı benzersiz değer tanımlayan türüRadioButton.BorderColor,ColorKenarlık konturu rengini tanımlayan türü.BorderWidth,doublekenarlığının genişliğini tanımlayan türüRadioButton.CharacterSpacing, görünendoublemetnin karakterleri arasındaki boşluğu tanımlayan türü.CornerRadius' ninintköşe yarıçapını tanımlayan türüRadioButton.FontAttributes, türüFontAttributesmetin stilini belirler.FontFamily,stringyazı tipi ailesini tanımlayan türü.FontSize,doubleyazı tipi boyutunu tanımlayan türü.TextColor, görünenColormetnin rengini tanımlayan türü.TextTransform, görünenTextTransformmetnin büyük küçük harflerini tanımlayan türü.
Bu özellikler nesneler tarafından desteklenir BindableProperty , bu, veri bağlamalarının hedefleri olabileceği ve stillendirilmiş olduğu anlamına gelir.
RadioButtonDenetim Ayrıca CheckedChangedIsChecked , Kullanıcı veya programlı düzenleme aracılığıyla özellik değiştiğinde tetiklenen bir olayı tanımlar. CheckedChangedEventArgsOlaya eşlik eden nesnenin CheckedChanged türünde, adlı tek bir özelliği vardır Valuebool . Olay harekete geçirildiğinde, CheckedChangedEventArgs.Value özelliğinin değeri özelliğin yeni değerine ayarlanır IsChecked .
RadioButton Gruplandırma, RadioButtonGroup aşağıdaki eklenmiş özellikleri tanımlayan sınıfı tarafından yönetilebilir:
GroupName' de,stringiçindeki nesneler için Grup adını tanımlayan türüRadioButtonLayout<View>.SelectedValue,objectbir grup içindeki denetlenen nesnenin değerini temsil eden türüRadioButtonLayout<View>. Bu Ekli ÖzellikTwoWayVarsayılan olarak bir bağlama kullanır.
Ekli Özellik hakkında daha fazla bilgi için GroupName bkz. GroupName. Ekli Özellik hakkında daha fazla bilgi için SelectedValue bkz. SelectedValue.
RadioButtons oluştur
Öğesinin görünümü, RadioButton özelliğine atanan veri türü tarafından tanımlanır RadioButton.Content :
RadioButton.ContentÖzelliği bir atandığındastring, her platformda, radyo düğmesi çemberin yanında yatay hizalanmış şekilde görüntülenir.RadioButton.ContentA atandığındaView, desteklenen platformlar (IOS, UWP) üzerinde görüntülenir, ancak desteklenmeyen platformlar nesnenin dize gösterimineView(Android) geri dönüş olur. Her iki durumda da içerik radyo düğmesi çemberin yanında yatay hizalı olarak görüntülenir.- Bir
ControlTemplateöğesine uygulandığındaRadioButton,ViewRadioButton.Contenttüm platformlarda özelliğine bir atanabilir. Daha fazla bilgi için bkz. RadioButton görünümünü yeniden tanımlama.
Dize tabanlı içeriği görüntüle
RadioButton, Content Özelliği şuna atandığında bir metin görüntüler string :
<StackLayout>
<Label Text="What's your favorite animal?" />
<RadioButton Content="Cat" />
<RadioButton Content="Dog" />
<RadioButton Content="Elephant" />
<RadioButton Content="Monkey"
IsChecked="true" />
</StackLayout>
Bu örnekte, RadioButton nesneler aynı üst kapsayıcının içinde örtük olarak gruplandırılır. Bu XAML, aşağıdaki ekran görüntüsünde gösterilen görünüme neden olur:
ekran görüntüsü
Rastgele içerik görüntüle
İOS ve UWP 'de, RadioButton özelliği şuna atandığında, bir rastgele içerik görüntüleyebilir ContentView :
<StackLayout>
<Label Text="What's your favorite animal?" />
<RadioButton>
<RadioButton.Content>
<Image Source="cat.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton>
<RadioButton.Content>
<Image Source="dog.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton>
<RadioButton.Content>
<Image Source="elephant.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton>
<RadioButton.Content>
<Image Source="monkey.png" />
</RadioButton.Content>
</RadioButton>
</StackLayout>
Bu örnekte, RadioButton nesneler aynı üst kapsayıcının içinde örtük olarak gruplandırılır. Bu XAML, aşağıdaki ekran görüntüsünde gösterilen görünüme neden olur:
'ın ekran görüntüsü
Android 'de RadioButton nesneler, View içerik olarak ayarlanan nesnenin dize tabanlı temsilini görüntüler:
Android
Not
Bir ControlTemplate öğesine uygulandığında RadioButton , ViewRadioButton.Content tüm platformlarda özelliğine bir atanabilir. Daha fazla bilgi için bkz. RadioButton görünümünü yeniden tanımlama.
Değerleri RadioButtons ile ilişkilendir
Her RadioButton nesne Valueobject , radyo düğmesi ile ilişkilendirmek için isteğe bağlı benzersiz bir değer tanımlayan türünde bir özelliğine sahiptir. Bu, öğesinin değerinin RadioButton içeriğine farklı olmasını sağlar ve RadioButton nesneler nesneleri görüntülerken özellikle kullanışlıdır View .
Aşağıdaki XAML ContentValue her bir nesne üzerinde ve özelliklerini ayarlamayı gösterir RadioButton :
<StackLayout>
<Label Text="What's your favorite animal?" />
<RadioButton Value="Cat">
<RadioButton.Content>
<Image Source="cat.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Dog">
<RadioButton.Content>
<Image Source="dog.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Elephant">
<RadioButton.Content>
<Image Source="elephant.png" />
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Monkey">
<RadioButton.Content>
<Image Source="monkey.png" />
</RadioButton.Content>
</RadioButton>
</StackLayout>
Bu örnekte, her biri RadioButtonImage içerik olarak bir içerir, aynı zamanda dize tabanlı bir değer de tanımlar. Bu, denetlenen radyo düğmesinin değerini kolayca tanımlanmasını sağlar.
Grup RadioButton 'ları
Radyo düğmeleri gruplarda çalışır ve radyo düğmelerini gruplandırmak için üç yaklaşım vardır:
- Bunları aynı üst kapsayıcının içine yerleştirin. Bu, örtük gruplandırma olarak bilinir.
GroupNameGruptaki her radyo düğmesindeki özelliği aynı değere ayarlayın. Bu, Açık gruplandırma olarak bilinir.RadioButtonGroup.GroupNameÜst kapsayıcıda iliştirilmiş özelliği ayarlayın, bu daGroupNamekapsayıcıdaki herhangi bir nesnenin özelliğini ayarlarRadioButton. Bu, Açık gruplandırma olarak da bilinir.
Önemli
RadioButton nesnelerin gruplandırılacağı aynı üst öğeye ait olması gerekmez. Bunlar, bir grup adını paylaştıkları için birbirini dışlarlar.
GroupName özelliği ile açık gruplama
Aşağıdaki XAML örneği, RadioButton özelliklerini ayarlayarak nesneleri açıkça gruplandırmayı gösterir GroupName :
<Label Text="What's your favorite color?" />
<RadioButton Content="Red"
GroupName="colors" />
<RadioButton Content="Green"
GroupName="colors" />
<RadioButton Content="Blue"
GroupName="colors" />
<RadioButton Content="Other"
GroupName="colors" />
Bu örnekte, her biri RadioButton aynı değeri paylaştığından birbirini dışlıyor GroupName .
RadioButtonGroup. GroupName ekli özelliği ile açık gruplandırma
RadioButtonGroupSınıfı GroupNamestring , bir nesnesinde ayarlanabilir olan, türündeki iliştirilmiş bir özelliği tanımlar Layout<View> . Bu, herhangi bir düzenin radyo düğmesi grubuna açılmasını sağlar:
<StackLayout RadioButtonGroup.GroupName="colors">
<Label Text="What's your favorite color?" />
<RadioButton Content="Red" />
<RadioButton Content="Green" />
<RadioButton Content="Blue" />
<RadioButton Content="Other" />
</StackLayout>
Bu örnekte, içindeki her birinin RadioButtonStackLayoutGroupName özelliği olarak ayarlanmış olur fruits ve birbirini dışlamalı.
Not
Layout<View>RadioButtonGroup.GroupName Ekli özelliği ayarlayan bir nesne RadioButton , özelliğini ayarlayan bir nesnesi içerdiğinde GroupName , RadioButton.GroupName özelliğin değeri öncelikli olur.
RadioButton durum değişikliklerine yanıt verme
Radyo düğmesinin iki durumu vardır: işaretli veya işaretlenmemiş. Radyo düğmesi işaretlendiğinde, IsChecked özelliği olur true . Radyo düğmesi işaretli değilken, IsChecked özelliği olur false . Radyo düğmesi aynı gruptaki başka bir radyo düğmesine dokunarak temizlenemez, ancak tekrar dokunarak temizlenemez. Ancak, özelliğini olarak ayarlayarak radyo düğmesini programlı bir IsChecked şekilde temizleyebilirsiniz false .
Olay tetikme yanıt verme
IsCheckedÖzelliği Kullanıcı veya programlı düzenleme aracılığıyla değiştirildiğinde CheckedChanged olay ateşlenir. Bu olay için bir olay işleyicisi, değişikliğe yanıt vermek için kaydedilebilir:
<RadioButton Content="Red"
GroupName="colors"
CheckedChanged="OnColorsRadioButtonCheckedChanged" />
Arka plan kodu olay işleyicisini içerir CheckedChanged :
void OnColorsRadioButtonCheckedChanged(object sender, CheckedChangedEventArgs e)
{
// Perform required operation
}
senderBağımsız değişkeni RadioButton Bu olaydan sorumludur. Bu RadioButton nesneyi nesnesine erişmek veya RadioButton aynı olay işleyicisini paylaşan birden çok nesne arasında ayrım yapmak için kullanabilirsiniz CheckedChanged .
Bir özellik değişikliğine yanıt verme
RadioButtonGroupSınıfı SelectedValueobject , bir nesnesinde ayarlanabilir olan, türündeki iliştirilmiş bir özelliği tanımlar Layout<View> . Bu iliştirilmiş özellik, RadioButton bir düzen üzerinde tanımlanan bir grup içinde denetlenen değeri temsil eder.
Özellik IsChecked kullanıcı veya programlı işleme aracılığıyla değişirse, RadioButtonGroup.SelectedValue ekli özellik de değişir. Bu RadioButtonGroup.SelectedValue nedenle, eklenen özellik kullanıcının seçimini depolar bir özelikle bağlı veriler olabilir:
<StackLayout RadioButtonGroup.GroupName="{Binding GroupName}"
RadioButtonGroup.SelectedValue="{Binding Selection}">
<Label Text="What's your favorite animal?" />
<RadioButton Content="Cat"
Value="Cat" />
<RadioButton Content="Dog"
Value="Dog" />
<RadioButton Content="Elephant"
Value="Elephant" />
<RadioButton Content="Monkey"
Value="Monkey"/>
<Label x:Name="animalLabel">
<Label.FormattedText>
<FormattedString>
<Span Text="You have chosen:" />
<Span Text="{Binding Selection}" />
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
Bu örnekte, eklenen RadioButtonGroup.GroupName özelliğin değeri bağlama GroupName bağlamındaki özelliği tarafından ayarlanır. Benzer şekilde, eklenen RadioButtonGroup.SelectedValue özelliğin değeri bağlama Selection bağlamındaki özelliği tarafından ayarlanır. Ayrıca, Selection özelliği denetlenen Value özelliğinin özelliğine RadioButton güncelleştirilir.
RadioButton görsel durumları
RadioButton nesneleri, CheckedUnchecked işaretlendiğinde veya işaretlendiğinde görsel değişikliği başlatmak için kullanılan RadioButton ve görsel durumları vardır.
Aşağıdaki XAML örneği, ve durumları için görsel durum Checked tanımlamayı Unchecked gösterir:
<ContentPage ...>
<ContentPage.Resources>
<Style TargetType="RadioButton">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CheckedStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter Property="TextColor"
Value="Green" />
<Setter Property="Opacity"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Unchecked">
<VisualState.Setters>
<Setter Property="TextColor"
Value="Red" />
<Setter Property="Opacity"
Value="0.5" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</ContentPage.Resources>
<StackLayout>
<Label Text="What's your favorite mode of transport?" />
<RadioButton Content="Car" />
<RadioButton Content="Bike" />
<RadioButton Content="Train" />
<RadioButton Content="Walking" />
</StackLayout>
</ContentPage>
Bu örnekte, örtülü Style nesneleri RadioButton hedefler. CheckedVisualState , bir işaretli olduğunda RadioButton özelliğinin TextColor 1 değeriyle yeşile Opacity ayar olacağını belirtir. , denetlenmeyen durumda olduğunda özelliğinin UncheckedVisualStateRadioButtonTextColorOpacity 0,5 değeriyle kırmızıya ayar olacağını belirtir. Bu nedenle, genel etki, işaretini kaldıran bir kırmızı ve kısmen saydam ve işaretlendiğinde saydam olmayan RadioButton yeşil olmasıdır:

Görsel durumları hakkında daha fazla bilgi için Xamarin.Forms Visual State Manager bkz. .
RadioButton görünümünü yeniden tanımlama
Varsayılan olarak, RadioButton nesneler desteklenen platformlarda yerel denetimler kullanmak için platform işleyicileri kullanır. Ancak, RadioButton görsel yapı ile yeniden tanımlandırılabilir, böylece nesneler tüm ControlTemplateRadioButton platformlarda aynı bir görünüme sahip olur. Sınıf sınıfından RadioButton devralınıyor olduğundan bu TemplatedView mümkündür.
Aşağıdaki XAML, ControlTemplate nesnelerin görsel yapısını yeniden tanımlamak için kullanılan bir RadioButton gösterir:
<ContentPage ...>
<ContentPage.Resources>
<ControlTemplate x:Key="RadioButtonTemplate">
<Frame BorderColor="#F3F2F1"
BackgroundColor="#F3F2F1"
HasShadow="False"
HeightRequest="100"
WidthRequest="100"
HorizontalOptions="Start"
VerticalOptions="Start"
Padding="0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroupList>
<VisualStateGroup x:Name="CheckedStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter Property="BorderColor"
Value="#FF3300" />
<Setter TargetName="check"
Property="Opacity"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Unchecked">
<VisualState.Setters>
<Setter Property="BackgroundColor"
Value="#F3F2F1" />
<Setter Property="BorderColor"
Value="#F3F2F1" />
<Setter TargetName="check"
Property="Opacity"
Value="0" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</VisualStateManager.VisualStateGroups>
<Grid Margin="4"
WidthRequest="100">
<Grid WidthRequest="18"
HeightRequest="18"
HorizontalOptions="End"
VerticalOptions="Start">
<Ellipse Stroke="Blue"
Fill="White"
WidthRequest="16"
HeightRequest="16"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Ellipse x:Name="check"
Fill="Blue"
WidthRequest="8"
HeightRequest="8"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Grid>
<ContentPresenter />
</Grid>
</Frame>
</ControlTemplate>
<Style TargetType="RadioButton">
<Setter Property="ControlTemplate"
Value="{StaticResource RadioButtonTemplate}" />
</Style>
</ContentPage.Resources>
<!-- Page content -->
</ContentPage>
Bu örnekte, öğesinin kök öğesi ControlTemplate ve görsel durumları tanımlayan bir FrameCheckedUnchecked nesnedir. nesnesi, Frame bir görsel yapısını tanımlamak için , ve GridEllipseContentPresenter nesnelerinin bir birleşimini RadioButton kullanır. Örnekte ayrıca, sayfasındaki herhangi bir nesnelerin özelliğine ControlTemplate atanacak örtülü bir stil de yer RadioButton almaktadır.
Not
nesnesi, ContentPresenter görsel yapıda içeriğin RadioButton görüntülen yer olduğu konumu işaretler.
Aşağıdaki XAML, RadioButton örtülü stil aracılığıyla ControlTemplateRadioButton gösterir:
<StackLayout>
<Label Text="What's your favorite animal?" />
<StackLayout RadioButtonGroup.GroupName="animals"
Orientation="Horizontal">
<RadioButton Value="Cat">
<RadioButton.Content>
<StackLayout>
<Image Source="cat.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Label Text="Cat"
HorizontalOptions="Center"
VerticalOptions="End" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Dog">
<RadioButton.Content>
<StackLayout>
<Image Source="dog.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Label Text="Dog"
HorizontalOptions="Center"
VerticalOptions="End" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Elephant">
<RadioButton.Content>
<StackLayout>
<Image Source="elephant.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Label Text="Elephant"
HorizontalOptions="Center"
VerticalOptions="End" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
<RadioButton Value="Monkey">
<RadioButton.Content>
<StackLayout>
<Image Source="monkey.png"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Label Text="Monkey"
HorizontalOptions="Center"
VerticalOptions="End" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
</StackLayout>
</StackLayout>
Bu örnekte, her biri için tanımlanan görsel yapısı içinde tanımlanan görsel yapısıyla değiştirilir ve bu nedenle çalışma zamanında nesneleri her için görsel ağacının RadioButtonControlTemplate bir parçası ControlTemplateRadioButton olur. Ayrıca, her bir RadioButton içerik, denetim ContentPresenter şablonunda tanımlanan ile değiştiritir. Bu, aşağıdaki görünümle RadioButton sonuç verir:

Denetim şablonları hakkında daha fazla bilgi için bkz. Xamarin.Forms control templates .
RadioButton'ı devre dışı bırakma
Bazen uygulama, denetlenen bir RadioButton uygulamanın geçerli bir işlem olmadığını bir durumuna girer. Böyle durumlarda, özelliği RadioButton olarak ayar tarafından devre dışı IsEnabledfalse bırakılabilir.
Örneği indirin