Question

J'ai un groupe de trois boutons radio. Selon le bouton radio sélectionné, je souhaite utiliser l'une des trois commandes suivantes: une zone de texte, une liste déroulante ou un bouton. Comment puis-je afficher les contrôles en fonction du résultat du bouton radio sélectionné?

Était-ce utile?

La solution

Vous pouvez lier la visibilité du contrôle à la propriété IsChecked de RadioButton à l'aide de la BooleanToVisibilityConverter:

.
<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:

  

Ces solutions fonctionnent bien et sont simples à mettre en œuvre. Est-il possible d'empêcher les commandes d'être masquées en mode Création?

Je ne connais pas les autres concepteurs (Blend, par exemple), mais dans le concepteur Visual Studio, les contrôles ne sont jamais masqués ...

Quoi qu'il en soit, vous pouvez implémenter votre propre convertisseur, qui renverrait toujours Visible en mode conception. Pour une raison obscure, la classe BooleanToVisibilityConverter est scellée, vous ne pouvez donc pas en hériter. Vous pouvez également déléguer la conversion à un convertisseur booléenVersibilité, si vous ne souhaitez pas réécrire la logique de conversion:

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
}

Autres conseils

Pour que le composant soit visible pendant la conception, vous pouvez ajouter un FallbackValue de true à la case à cocher sous la forme suivante:

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}"
                                Grid.Column="2"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top