Xamarin.Forms Radiobutton
Xamarin.FormsRadioButton
, kullanıcıların bir kümeden bir seçenek belirlemesine olanak tanıyan bir düğme türüdür. Her seçenek bir radyo düğmesiyle gösterilir ve grupta yalnızca bir radyo düğmesi seçebilirsiniz. Varsayılan olarak, her RadioButton
bir metin görüntüler:
Ancak, bazı platformlarda bir RadioButton
görüntüleyebilir View
ve tüm platformlarda her RadioButton
birinin görünümü ile ControlTemplate
yeniden tanımlanabilir:
Denetim RadioButton
aşağıdaki özellikleri tanımlar:
Content
, türündekiobject
ve tarafından görüntülenecekRadioButton
veyaView
öğesini tanımlarstring
.IsChecked
, türündekibool
öğesinin işaretli olup olmadığınıRadioButton
tanımlar. Bu özellik birTwoWay
bağlama kullanır ve varsayılan değerinefalse
sahiptir.GroupName
, türündedirstring
ve hangiRadioButton
denetimlerin birbirini dışladığını belirten adı tanımlar. Bu özelliğin varsayılan değeri vardırnull
.Value
, türündekiobject
ile ilişkiliRadioButton
isteğe bağlı benzersiz bir değer tanımlar.BorderColor
, sınır vuruşu rengini tanımlayan türündedirColor
.BorderWidth
, türündedirdouble
ve kenarlık genişliğiniRadioButton
tanımlar.CharacterSpacing
, türündedirdouble
ve görüntülenen herhangi bir metnin karakterleri arasındaki aralığı tanımlar.CornerRadius
, türününint
köşe yarıçapınıRadioButton
tanımlar.FontAttributes
, türüneFontAttributes
göre metin stilini belirler.FontFamily
, yazı tipi ailesini tanımlayan türündedirstring
.FontSize
, yazı tipi boyutunu tanımlayan türündedirdouble
.TextColor
, türündedirColor
ve görüntülenen metinlerin rengini tanımlar.TextTransform
, türündedirTextTransform
ve görüntülenen metinlerin büyük/küçük harflerini tanımlar.
Bu özellikler nesneler tarafından BindableProperty
desteklenir; bu da veri bağlamalarının hedefleri olabileceği ve stillendirilebileceği anlamına gelir.
Denetim RadioButton
ayrıca, kullanıcı veya programlı işleme aracılığıyla özellik değiştiğinde IsChecked
tetiklenen bir CheckedChanged
olayı da tanımlar. Olaya CheckedChangedEventArgs
eşlik eden nesnenin CheckedChanged
türünde bool
adlı Value
tek bir özelliği vardır. Olay tetiklendiğinde, özelliğin CheckedChangedEventArgs.Value
değeri özelliğin yeni değerine IsChecked
ayarlanır.
RadioButton
gruplandırma, aşağıdaki ekli özellikleri tanımlayan sınıf tarafından RadioButtonGroup
yönetilebilir:
GroupName
, türündekistring
birLayout<View>
içindeki nesnelerin grup adınıRadioButton
tanımlar.SelectedValue
, türündekiobject
birLayout<View>
grup içindeki denetlenenRadioButton
nesnenin değerini temsil eder. Bu ekli özellik varsayılan olarak birTwoWay
bağlama kullanır.
Ekli özellik hakkında GroupName
daha fazla bilgi için bkz . RadioButtons Grubu. Ekli özellik hakkında SelectedValue
daha fazla bilgi için bkz . RadioButton durum değişikliklerini yanıtlama.
RadioButtons Oluşturma
' RadioButton
nin görünümü, özelliğe atanan veri türüne RadioButton.Content
göre tanımlanır:
- Özelliğine
RadioButton.Content
birstring
atandığında, her platformda radyo düğmesi dairesinin yanına yatay olarak hizalanmış olarak görüntülenir. RadioButton.Content
öğesine atandığındaView
desteklenen platformlarda (iOS, UWP) görüntülenirken, desteklenmeyen platformlar nesneninView
(Android) dize gösterimine geri alınır. Her iki durumda da, içerik radyo düğmesi dairesinin yanında yatay olarak hizalanmış olarak görüntülenir.- bir
ControlTemplate
öğesine uygulandığındaRadioButton
View
, özelliğine tüm platformlarda atanabilirRadioButton.Content
. Daha fazla bilgi için bkz . RadioButton görünümünü yeniden tanımlama.
Dize tabanlı içeriği görüntüleme
RadioButton
Özelliğine Content
bir string
atandığında metni görüntüler:
<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 örtük olarak aynı üst kapsayıcı içinde gruplandırılır. Bu XAML, aşağıdaki ekran görüntülerinde gösterilen görünüme neden olur:
Rastgele içerik görüntüleme
iOS ve UWP'de, RadioButton
özelliğine Content
bir View
atandığında rastgele içerik görüntüleyebilir:
<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 örtük olarak aynı üst kapsayıcı içinde gruplandırılır. Bu XAML, aşağıdaki ekran görüntülerinde gösterilen görünüme neden olur:
Android'de nesneler, RadioButton
içerik olarak ayarlanan nesnenin View
dize tabanlı bir gösterimini görüntüler:
Not
bir ControlTemplate
öğesine uygulandığındaRadioButton
View
, özelliğine tüm platformlarda atanabilirRadioButton.Content
. Daha fazla bilgi için bkz . RadioButton görünümünü yeniden tanımlama.
Değerleri RadioButtons ile ilişkilendirme
Her RadioButton
nesnenin, radyo düğmesiyle ilişkilendirilecek isteğe bağlı benzersiz bir değeri tanımlayan türünde object
bir Value
özelliği vardır. Bu, değerinin RadioButton
içeriğinden farklı olmasını sağlar ve özellikle nesneler nesneleri görüntülerken RadioButton
View
kullanışlıdır.
Aşağıdaki XAML her nesnede RadioButton
ve Value
özelliklerini ayarlamayı Content
gösterir:
<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 RadioButton
birinin içeriği olarak bir Image
değeri vardır ve aynı zamanda dize tabanlı bir değer tanımlar. Bu, denetlenen radyo düğmesinin değerinin kolayca tanımlanmasını sağlar.
RadioButton'ları Gruplandır
Radyo düğmeleri gruplar halinde çalışır ve radyo düğmelerini gruplandırmaya yönelik üç yaklaşım vardır:
- Bunları aynı üst kapsayıcıya yerleştirin. Bu, örtük gruplandırma olarak bilinir.
- Gruptaki
GroupName
her radyo düğmesinde özelliğini aynı değere ayarlayın. Bu, açık gruplandırma olarak bilinir. RadioButtonGroup.GroupName
Ekli özelliği bir üst kapsayıcıda ayarlayın ve bu da kapsayıcıdaki nesnelerinRadioButton
özelliğini ayarlarGroupName
. Bu, açık gruplandırma olarak da bilinir.
Önemli
RadioButton
nesnelerin gruplanması için aynı üst öğeye ait olması gerekmez. Grup adını paylaşmaları koşuluyla birbirini dışlarlar.
GroupName özelliğiyle açık gruplandırma
Aşağıdaki XAML örneği, özelliklerini ayarlayarak nesneleri açıkça gruplandırma RadioButton
işlemini GroupName
gösterir:
<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 RadioButton
biri aynı GroupName
değeri paylaştığından birbirini dışlar.
RadioButtonGroup.GroupName ekli özelliğiyle açık gruplandırma
RadioButtonGroup
sınıfı, nesne GroupName
üzerinde ayarlanabilen türünde string
bir Layout<View>
ekli özellik tanımlar. Bu, herhangi bir düzenin radyo düğmesi grubuna dönüştürülmelerini 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 RadioButton
birinin StackLayout
GroupName
özelliği olarak colors
ayarlanır ve birbirini dışlar.
Not
Ekli özelliği ayarlayan RadioButtonGroup.GroupName
bir>Layout<View
nesne, özelliğini ayarlayan GroupName
bir RadioButton
içerdiğinde, özelliğin RadioButton.GroupName
değeri öncelikli olur.
RadioButton durum değişikliklerini yanıtlama
Radyo düğmesinin iki durumu vardır: işaretli veya işaretsiz. Radyo düğmesi işaretlendiğinde özelliği IsChecked
şeklindedir true
. Radyo düğmesinin işareti kaldırıldığında özelliği IsChecked
şeklindedir false
. Bir radyo düğmesi, aynı gruptaki başka bir radyo düğmesine dokunarak temizlenebilir, ancak yeniden dokunarak temizlenemez. Ancak, özelliğini false
olarak ayarlayarak IsChecked
radyo düğmesini program aracılığıyla temizleyebilirsiniz.
Bir olayın tetiklemesine yanıt verme
Özellik değiştiğinde IsChecked
, kullanıcı veya programlı işleme CheckedChanged
aracılığıyla olay tetikler. 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 planda kod, olayın işleyicisini CheckedChanged
içerir:
void OnColorsRadioButtonCheckedChanged(object sender, CheckedChangedEventArgs e)
{
// Perform required operation
}
sender
Bağımsız değişken bu olayın sorumlusudurRadioButton
. Bunu nesneye erişmek veya aynı CheckedChanged
olay işleyicisini RadioButton
paylaşan birden çok RadioButton
nesne arasında ayrım yapmak için kullanabilirsiniz.
Özellik değişikliğine yanıt verme
RadioButtonGroup
sınıfı, nesne SelectedValue
üzerinde ayarlanabilen türünde object
bir Layout<View>
ekli özellik tanımlar. Bu ekli özellik, düzende tanımlanan bir grup içinde denetlenen RadioButton
değerini temsil eder.
IsChecked
Özellik, kullanıcı veya programlı işleme aracılığıyla değiştiğindeRadioButtonGroup.SelectedValue
, eklenen özellik de değişir. Bu nedenle, RadioButtonGroup.SelectedValue
eklenen özellik kullanıcının seçimini depolayan bir özelliğe 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, bağlı özelliğin RadioButtonGroup.GroupName
değeri bağlama bağlamında özelliği tarafından GroupName
ayarlanır. Benzer şekilde, ekli özelliğin RadioButtonGroup.SelectedValue
değeri bağlama bağlamında özelliği tarafından Selection
ayarlanır. Ayrıca özelliği, Selection
işaretli RadioButton
özelliğinin özelliğine güncelleştirilirValue
.
RadioButton görsel durumları
RadioButton
nesneleri, bir işaretli veya işaretsiz olduğunda RadioButton
bir görsel değişikliği başlatmak için kullanılabilecek ve Unchecked
görsel durumlarına sahiptirChecked
.
Aşağıdaki XAML örneğinde ve Unchecked
durumları için Checked
görsel durumun nasıl tanımlanacağı gösterilmektedir:
<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ük Style
nesneleri hedefler RadioButton
. , Checked
VisualState
bir RadioButton
işaretlendiğinde TextColor
özelliğinin 1 değeriyle Opacity
yeşil olarak ayarlandığını belirtir. , Unchecked
VisualState
işareti RadioButton
kaldırılmış durumda TextColor
olduğunda özelliğinin 0,5 değeriyle Opacity
kırmızı olarak ayarlandığını belirtir. Bu nedenle genel etki, işareti RadioButton
kaldırıldığında kırmızı ve kısmen saydam olması ve işaretlendiğinde saydamlık olmadan yeşil olmasıdır:
Görsel durumlar hakkında daha fazla bilgi için bkz Xamarin.Forms . Visual State Manager.
RadioButton görünümünü yeniden tanımlama
Varsayılan olarak, RadioButton
nesneler desteklenen platformlarda yerel denetimleri kullanmak için platform işleyicilerini kullanır. Bununla birlikte, RadioButton
görsel yapı ile ControlTemplate
yeniden tanımlanabilir, böylece RadioButton
nesneler tüm platformlarda aynı görünüme sahip olur. Sınıfı sınıfından TemplatedView
devraldığından RadioButton
bu mümkündür.
Aşağıdaki XAML, nesnelerin görsel yapısını RadioButton
yeniden tanımlamak için kullanılabilecek bir ControlTemplate
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 ControlTemplate
kök öğesi, ve Unchecked
görsel durumlarını tanımlayan Checked
bir Frame
nesnedir. Frame
nesnesi, bir görsel yapısını tanımlamak için , Ellipse
ve ContentPresenter
nesnelerinin birleşimini Grid
RadioButton
kullanır. Örnek ayrıca sayfadaki herhangi RadioButton
bir nesnenin ControlTemplate
özelliğine öğesini atayan RadioButtonTemplate
örtük bir stil içerir.
Not
ContentPresenter
nesnesi görsel yapısında RadioButton
içeriğin görüntüleneceği konumu işaretler.
Aşağıdaki XAML, örtük stil aracılığıyla kullanan ControlTemplate
nesneleri gösterirRadioButton
:
<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 RadioButton
biri için tanımlanan görsel yapısı içinde tanımlanan görsel yapısıyla değiştirildiğinden ControlTemplate
, çalışma zamanında içindeki ControlTemplate
nesneler her RadioButton
için görsel ağacının parçası haline gelir. Ayrıca, her RadioButton
birinin içeriği denetim şablonunda tanımlananla değiştirilir ContentPresenter
. Bu, aşağıdaki RadioButton
görünüme neden olur:
Denetim şablonları hakkında daha fazla bilgi için bkz Xamarin.Forms . denetim şablonları.
RadioButton'ı devre dışı bırakma
Bazen bir uygulama denetlenen RadioButton
bir işlemin geçerli olmadığı bir duruma girer. Böyle durumlarda, RadioButton
özelliği false
olarak ayarlanarak IsEnabled
devre dışı bırakılabilir.