2017-02-20 2 views
0

Ich bin neu bei Wpf Ich habe eine Gruppe von 3 Optionsfeldern für alle Kontrollkästchen, es ist nicht sichtbar, wenn keine von Der Radiobutton wird überprüft oder der dritte Radioknopf der Gruppe wird überprüft.wpf - checkbox.isvisible ist ture, wenn eines der Optionsfelder aktiviert ist oder kein Optionsfeld aktiviert ist

Ich frage mich, ob es einen Weg gibt, dies zu erreichen? Ich versuche in BooleanToVisibility gebaut, aber es funktioniert nicht. Muss ich etwas wie mehrere Daten Trigger verwenden? Vielen Dank!

Antwort

1

Sie haben Recht mit MultiBinding. XAML sollte wie folgt aussehen:

<Window.Resources> 
    <local:MultiBoolToVisibilityConverter x:Key="MultiBoolToVisibilityConverter"/> 
</Window.Resources> 
<DockPanel> 
    <StackPanel DockPanel.Dock="Top"> 
     <RadioButton Name="rb1" Content="1"/> 
     <RadioButton Name="rb2" Content="2"/> 
     <RadioButton Name="rb3" Content="3"/> 
    </StackPanel> 
    <CheckBox DockPanel.Dock="Bottom" Content="Visible when 1 or 2 is checked."> 
     <CheckBox.Visibility> 
      <MultiBinding Converter="{StaticResource MultiBoolToVisibilityConverter}"> 
       <Binding Path="IsChecked" ElementName="rb1" /> 
       <Binding Path="IsChecked" ElementName="rb2" /> 
       <Binding Path="IsChecked" ElementName="rb3" /> 
      </MultiBinding> 
     </CheckBox.Visibility> 
    </CheckBox> 
</DockPanel> 

Der MultiBoolToVisibilityConverter im Konverter sollte hinter im Code definiert werden, IMultiValueConverter

public class MultiBoolToVisibilityConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     bool? firstRadioButtonIsChecked = values[0] as bool?; 
     bool? secondRadioButtonIsChecked = values[1] as bool?; 
     bool? thirdRadioButtonIsChecked = values[2] as bool?; 

     //set your logic. this is just an example: 
     if (firstRadioButtonIsChecked == true || secondRadioButtonIsChecked == true) 
      return Visibility.Visible; 
     return Visibility.Collapsed; 

    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

für weitere Fragen der Umsetzung, Sie this post on MultiBinding and IMultiValueConverter unter anderem Google Vorschläge sehen können.

Verwandte Themen