【问题标题】:WPF Stack Panel show hide childrenWPF 堆栈面板显示隐藏子项
【发布时间】:2012-12-07 10:13:43
【问题描述】:

我有一个带有两个单选按钮的堆栈面板。一个是选项 A,另一个是选项 B。一次只能选择一个。当我选中选项 B 时,我想在选项 B 单选按钮下方和堆栈面板内显示几个文本框。当我再次选择选项 A 时,文本框应该不可见。如何仅使用 XAML 来完成此操作?

【问题讨论】:

标签: c# .net wpf xaml


【解决方案1】:

您可以绑定到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

【讨论】:

    【解决方案2】:

    仅在没有转换器的 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}"/>
    

    希望对你有帮助..

    【讨论】:

      【解决方案3】:

      试试这个代码希望能解决你的问题。

      将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)

      【讨论】:

      • 两个问题。首先,可见性可能应该更改为折叠,而不是隐藏。其次,这不仅仅是问题中特别要求的 XAML。
      【解决方案4】:

      只要有一个事件,当您选择选项 A 时,TextBoxes 都会设置为:

      Textbox.Visibility = Collapsed or Hidden
      

      取决于您希望如何显示它们。

      【讨论】:

      • 是的。我在发帖后不久就意识到了这一点。
      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 2016-10-18
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多