2012-12-19 56 views
2

我有一個帶兩個單選按鈕的堆疊面板。一個是選項A和另一個選項B.一次只能選擇一個。當我檢查選項B時,我想在選項B radiobuttion下面和堆棧面板中顯示幾個文本框。當我再次選擇選項A時,文本框不應該可見。我怎樣才能通過使用XAML來實現這一點?WPF Stack Panel show hide children

+2

可能重複:http://stackoverflow.com/questions/1534208/binding-to -a-wpf-togglebuttons-ischecked-state – WildCrustacean

回答

2

只有在XAML甚至沒有轉換器。定義控件模板在你的資源,如

<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}"/> 

希望它有助於..

0

只要有一個事件,當您選擇選項A,無論是TextBoxes獲取設置爲:

Textbox.Visibility = Collapsed or Hidden 

取決於你想如何顯示它們。

+0

這不是XAML –

+0

是的。發佈後我才意識到這一點。 – JosephGarrone

2

您可以綁定到RadioButtonIsChecked屬性,並使用內置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> 

這將顯示TextBox只有當「OptionB」被選中。

1

試試這個代碼希望能解決你的問題。

將文本框放入堆棧面板並將堆棧面板的可見性屬性設置爲隱藏。 並在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> 

在代碼behid -

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尼廷(丁丁)

+0

有兩個問題。首先,可見性可能應該更改爲摺疊,而不是隱藏。其次,這不僅僅是XAML,正如問題中特別要求的那樣。 –