Frage

Ich habe eine Gruppe von drei Radio-Buttons. Je nachdem, welches Optionsfeld ausgewählt ist, mag ich eine von drei Kontrollen disaply - eine Textbox, eine Dropdown-Liste oder eine Taste. Wie zeige ich Kontrollen basierend auf dem Ergebnis eines ausgewählten Optionsfeld?

War es hilfreich?

Lösung

Sie können die Sichtbarkeit der Steuerung an die IsChecked Eigenschaft des RadioButton- binden, mit der 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:

  

Das Lösungen funktioniert großartig und es ist einfach zu implementieren. Gibt es trotzdem kann ich die Kontrollen verhindern, dass im Entwurfsmodus versteckt?

Ich weiß nicht, über andere Designer (Mischung zum Beispiel), aber in den Visual Studio-Designern werden die Steuerelemente nie versteckt ...

Wie auch immer, könnten Sie Ihren eigenen Konverter implementieren, die immer sichtbar im Entwurfsmodus zurückkehren würden. Aus unerfindlichen Gründen ist die BooleanToVisibilityConverter Klasse versiegelt, so dass Sie nicht von ihm erben. Sie können die Umwandlung in ein BooleanToVisibilityConverter stattdessen delegieren, wenn Sie die Konvertierungslogik neu zu schreiben nicht wollen:

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
}

Andere Tipps

Um die Komponente sichtbar während der Entwurfszeit halten Sie eine FallbackValue von true die Checkbox hinzufügen können, wie:

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}"
                                Grid.Column="2"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top