2009-06-25 13 views
3

3つのラジオボタンのグループがあります。どのラジオボタンが選択されているかに応じて、テキストボックス、ドロップダウンリスト、またはボタンの3つのコントロールのうちの1つを切り離したいとします。選択したラジオボタンの結果に基づいてコントロールを表示するにはどうすればよいですか?選択したラジオボタンに基づいてコントロールを表示

答えて

15

あなたはBooleanToVisibilityConverter使用して、ラジオボタンのにisCheckedプロパティにコントロールの可視性をバインドすることができます。

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <BooleanToVisibilityConverter x:Key="convVisibility"/> 
    </Page.Resources> 
    <Grid> 
    <StackPanel Orientation="Vertical"> 
     <RadioButton Name="radioButton1" GroupName="group1">Control1</RadioButton> 
     <RadioButton Name="radioButton2" GroupName="group1">Control2</RadioButton> 
     <RadioButton Name="radioButton3" GroupName="group1">Control3</RadioButton> 
     <Grid> 
     <Button Visibility="{Binding IsChecked, ElementName=radioButton1, Converter={StaticResource convVisibility}}">1. Button</Button> 
     <TextBlock Visibility="{Binding IsChecked, ElementName=radioButton2, Converter={StaticResource convVisibility}}">2. TextBlock</TextBlock> 
     <TextBox Visibility="{Binding IsChecked, ElementName=radioButton3, Converter={StaticResource convVisibility}}">3. TextBox</TextBox> 
     </Grid> 
    </StackPanel> 
    </Grid> 
</Page> 

EDIT:

ソリューションは素晴らしい作品、それが実現するのは簡単です。とにかく、コントロールがデザインモードで隠れてしまうのを防ぐことができますか?

私は他のデザイナー(例えばブレンド)については知らないが、Visual Studioのデザイナでコントロールが隠されることはありません...とにかく

、あなたは常に希望、独自のコンバータを実装することができデザインモードで表示されます。あいまいな理由から、BooleanToVisibilityConverterクラスは密封されているため、継承することはできません。あなたは変換ロジックを書き換えしたくない場合は、代わりにBooleanToVisibilityConverterへの変換を委任することができます。

public class MyBooleanToVisibilityConverter : IValueConverter 
{ 
    private BooleanToVisibilityConverter _converter = new BooleanToVisibilityConverter(); 
    private DependencyObject _dummy = new DependencyObject(); 

    private bool DesignMode 
    { 
     get 
     { 
      return DesignerProperties.GetIsInDesignMode(_dummy); 
     } 
    } 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (DesignMode) 
      return Visibility.Visible; 
     else 
      return _converter.Convert(value, targetType, parameter, culture); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return _converter.ConvertBack(value, targetType, parameter, culture); 
    } 

    #endregion 
} 
+0

この解決策はうまく機能し、実装が簡単です。とにかく、コントロールがデザインモードで隠れてしまうのを防ぐことができますか? – DenaliHardtail

+0

その質問に答えるために投稿を更新しました –

1

設計時に目に見えるコンポーネントを維持するために、あなたのように、チェックボックスにtrueFallbackValueを追加することができます。

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}" 
           Grid.Column="2"/> 
関連する問題