2017-02-20 32 views
0

Я новичок в Wpf У меня есть группа из 3 переключателей для всех флажков, это не видно, когда ни один из радиокнопка нажата или третья кнопка в группе проверена.wpf - checkbox.isvisible is ture, когда один из переключателей установлен или отсутствует радиокнопка

Интересно, есть ли способ достичь этого? Я пытаюсь построить booleanToVisibility, но он не работает. Мне нужно использовать что-то вроде нескольких триггеров данных? благодаря!

ответ

1

Вы имеете право на MultiBinding. Ваш Xaml должен выглядеть следующим образом:

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

MultiBoolToVisibilityConverter в преобразователе должны быть определены в коде позади, реализации 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(); 
    } 
} 

для дальнейших вопросов, вы можете увидеть this post on MultiBinding and IMultiValueConverter среди других предложений Google.

 Смежные вопросы

  • Нет связанных вопросов^_^