问题
I have four RadioButtons
in a grid panel, but when I do this:
<GroupBox x:Name="radioButtons">
<RadioButton Content="1" Height="16" HorizontalAlignment="Left" Margin="10,45,0,0" Name="status1" VerticalAlignment="Top" />
<RadioButton Content="2" Height="16" HorizontalAlignment="Left" Margin="10,67,0,0" Name="status2" VerticalAlignment="Top" />
<RadioButton Content="3" Height="16" HorizontalAlignment="Left" Margin="10,89,0,0" Name="status3" VerticalAlignment="Top" />
<RadioButton Content="4" Height="16" HorizontalAlignment="Left" Margin="10,111,0,0" Name="status4" VerticalAlignment="Top" />
</GroupBox>
It says that:
Error 1 The object 'GroupBox' already has a child and cannot add 'RadioButton'. 'GroupBox' can accept only one child.
And the last three RadioButtons
say:
The property 'Content' is set more than once.
What's wrong with my GroupBox
? Furthermore, in my code I want to access the RadioButton
that is checked (preferably as an int
). How do I do this? I tried to look in Google and I found a lot of results, but I couldn't understand any of them.
回答1:
GroupBox
can only hold 1 item, hence the error about trying to set the Content
property of the GroupBox
multiple times.
So, make that a Layout item and then put the RadioButton
s inside it. Now, you set the Content
once, which is the StackPanel
, and that Layout item can hold many children -> RadioButton
s.
<GroupBox x:Name="radioButtons">
<StackPanel>
<RadioButton Name="status1"
Height="16"
Margin="10,45,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="1" />
<RadioButton Name="status2"
Height="16"
Margin="10,67,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="2" />
<RadioButton Name="status3"
Height="16"
Margin="10,89,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="3" />
<RadioButton Name="status4"
Height="16"
Margin="10,111,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="4" />
</StackPanel>
</GroupBox>
As for your second question, Christian Mosers WPF Tutorial.net has a decent sample. If you don't understand it, you maybe should look at the topics Binding
and Converter
, first.
A very crude way to be notified of RadioButton
checked in a non MVVM way:
private void RadioButtonChecked(object sender, RoutedEventArgs e) {
var radioButton = sender as RadioButton;
if (radioButton == null)
return;
int intIndex = Convert.ToInt32(radioButton.Content.ToString());
MessageBox.Show(intIndex.ToString(CultureInfo.InvariantCulture));
}
Then, in each of your RadioButton
s in xaml, add Checked="RadioButtonChecked"
.
回答2:
If you want many elements or controls then you have to put them in layout containers.
- Grid
- StackPanel
- DockPanel
- WrapPanel
- Etc.....
来源:https://stackoverflow.com/questions/16036469/how-to-get-the-value-of-the-checked-radiobutton-in-wpf