2009-06-25 12 views

Antwort

15

Sie können die Sichtbarkeit der Steuerung an die IsChecked Eigenschaft des RadioButton- binden, die BooleanToVisibilityConverter mit:

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

, die Lösungen funktioniert super und es ist einfach zu implementieren. Kann ich irgendwie verhindern, dass die Steuerelemente im Design-Modus versteckt werden?

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

Wie dem auch sei, könnten Sie Ihre eigene Konverter implementieren, die würden immer zurück Sichtbar im Entwurfsmodus. Aus irgendeinem obskuren Grund ist die BooleanToVisibilityConverter-Klasse versiegelt, sodass Sie sie nicht erben können. 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 
} 
+0

Diese Lösungen funktioniert gut und es ist einfach zu implementieren. Kann ich irgendwie verhindern, dass die Steuerelemente im Design-Modus versteckt werden? – DenaliHardtail

+0

Ich habe meinen Beitrag aktualisiert, um diese Frage zu beantworten –

1

Um die Komponente zu halten sichtbar während der Entwurfszeit können Sie einen hinzufügen FallbackValue von true der Checkbox als:

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}" 
           Grid.Column="2"/> 
Verwandte Themen