【发布时间】:2012-12-07 10:13:43
【问题描述】:
我有一个带有两个单选按钮的堆栈面板。一个是选项 A,另一个是选项 B。一次只能选择一个。当我选中选项 B 时,我想在选项 B 单选按钮下方和堆栈面板内显示几个文本框。当我再次选择选项 A 时,文本框应该不可见。如何仅使用 XAML 来完成此操作?
【问题讨论】:
我有一个带有两个单选按钮的堆栈面板。一个是选项 A,另一个是选项 B。一次只能选择一个。当我选中选项 B 时,我想在选项 B 单选按钮下方和堆栈面板内显示几个文本框。当我再次选择选项 A 时,文本框应该不可见。如何仅使用 XAML 来完成此操作?
【问题讨论】:
您可以绑定到RadioButton IsChecked 属性并使用内置的BooleanToVisibilityConverter
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="300" Width="400" Name="UI" >
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Window.Resources>
<Grid>
<StackPanel Margin="0,0,0,202">
<RadioButton x:Name="OptionA" Content="OptionA" />
<RadioButton x:Name="OptionB" Content="OptionB" />
</StackPanel>
<TextBox Visibility="{Binding ElementName=OptionB, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" Text="My Textbox" Margin="0,65,165,167"/>
</Grid>
</Window>
这将仅在选中“OptionB”时显示TextBox。
【讨论】:
仅在没有转换器的 XAML 中。在您的资源中定义 ControlTemplate,例如
<Window.Resources>
<ControlTemplate x:Key="RadioButtonContent">
<Grid>
<StackPanel Margin="0,0,0,202">
<RadioButton x:Name="OptionA" Content="OptionA" />
<RadioButton x:Name="OptionB" Content="OptionB" />
</StackPanel>
<TextBox x:Name="MyTextBox"
Visibility="Visible"
Text="My Textbox" Margin="0,65,165,167"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=OptionB, Path=IsChecked}" Value="False">
<Setter TargetName="MyTextBox" Property="Visibility" Value="Hidden"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
并像使用它一样
<ContentControl Template="{StaticResource RadioButtonContent}"/>
希望对你有帮助..
【讨论】:
试试这个代码希望能解决你的问题。
将TextBoxes放在一个堆栈面板中,并将堆栈面板的Visibility属性设置为隐藏。 并在 OptionButton 事件上编写代码来设置 stackPanel 的 Visibility 属性。
<Grid.RowDefinitions>
<RowDefinition Height="33*"></RowDefinition>
<RowDefinition Height="33*"></RowDefinition>
<RowDefinition Height="33*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Margin="20" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0">
<RadioButton Name="rdA" Content="Option A" GroupName="txtBoxGroup" Checked="rdA_Checked"></RadioButton>
<RadioButton Name="rdB" Content="Option B" GroupName="txtBoxGroup" Checked="rdB_Checked"></RadioButton>
</StackPanel>
<StackPanel Margin="20" Name="TxtBxStackPanel" Height="auto" Orientation="Vertical" Grid.Column="0" Grid.Row="1" Visibility="Hidden">
<Label Content="My TextBox" VerticalAlignment="Center" HorizontalAlignment="Left"></Label>
<TextBox Name="txtValue" Height="20" Width="200" HorizontalAlignment="Left"></TextBox>
</StackPanel>
</Grid>
隐藏在代码中 -
private void rdB_Checked(object sender, RoutedEventArgs e)
{
TxtBxStackPanel.Visibility = Visibility.Visible;
}
private void rdA_Checked(object sender, RoutedEventArgs e)
{
TxtBxStackPanel.Visibility = Visibility.Hidden;
}
享受!!!!!!
谢谢
Ck 尼丁(TinTin)
【讨论】:
只要有一个事件,当您选择选项 A 时,TextBoxes 都会设置为:
Textbox.Visibility = Collapsed or Hidden
取决于您希望如何显示它们。
【讨论】: