2017-08-17 99 views
1

我有一個簡單的窗口,有三個單選按鈕和一個按鈕。我只想啓用按鈕,如果任何一個三個單選按鈕已被選中。對此進行編碼的最簡單方法是什麼?我發現了b2v轉換器的方法,但似乎沒有可以一次對多個元素進行可見性布爾檢查(並且我需要檢查是否選中了三個單選按鈕中的任何一個)。基於單選按鈕IsChecked的啓用按鈕

截圖:

enter image description here

代碼:

<!-- Why No Upgrade Content--> 
     <StackPanel Name="WhyNoUpgradeScreen" Visibility="Hidden"> 
      <TextBlock Text="Sorry You're Not Upgrading to Windows 10" HorizontalAlignment="Center" FontWeight="SemiBold"></TextBlock> 
      <TextBlock Text="Please let us know why:" HorizontalAlignment="Center" Height="38" Margin="0 20 0 0" TextWrapping="Wrap"></TextBlock> 
      <Grid Margin="0 0 0 0" HorizontalAlignment="Center"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 

       <RadioButton Name="NeedWin7RadioButton" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"> 
        <RadioButton.Content> 
         <TextBlock Text="Need Windows 7 or 8 for my job." TextWrapping="Wrap"/> 
        </RadioButton.Content> 
       </RadioButton> 
       <RadioButton Name="CantUpgradeRadioButton" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10 0 10 0"> 
        <RadioButton.Content> 
         <TextBlock Text="I've tried and can't upgrade." TextWrapping="Wrap"/> 
        </RadioButton.Content> 
       </RadioButton> 
       <RadioButton Name="OtherRadioButton" Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Top"> 
        <RadioButton.Content> 
         <TextBlock Text="Other." TextWrapping="Wrap"/> 
        </RadioButton.Content> 
       </RadioButton> 
      </Grid> 
      <Grid Margin="0 30 0 0"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition></ColumnDefinition> 
       </Grid.ColumnDefinitions> 

       <Button Name="BackButton_WhyNoUpgrade" Margin="30 0 150 0" Grid.Column="0" Content="Back" Click="BackButton_WhyNoUpgrade_Click" ></Button> 
       <Button Name="SendFeedbackButton_WhyNoUpgrade" Margin="85 0 0 0" Grid.Column="1" Content="Send Feedback" HorizontalAlignment="Center" Click="SendFeedbackButton_WhyNoUpgrade_Click" /> 
      </Grid> 
     </StackPanel>� 

回答

2

你可以爲每個單選按鈕創建觸發器

這基本上說:「讓我當第一個無線電檢查OR當第二個無線電被檢查或當第三個無線電被檢查時「

<Button Name="SendFeedbackButton_WhyNoUpgrade" Margin="85 0 0 0" Grid.Column="1" Content="Send Feedback" HorizontalAlignment="Center" Click="SendFeedbackButton_WhyNoUpgrade_Click" > 
    <Button.Style> 
    <Style TargetType="Button"> 

     <Setter Property="IsEnabled" Value="False"/> 

     <Style.Triggers> 

     <DataTrigger Binding="{Binding Path=IsChecked, ElementName=NeedWin7RadioButton}" Value="True"> 
      <Setter Property="IsEnabled" Value="True"/> 
     </DataTrigger> 

     <DataTrigger Binding="{Binding Path=IsChecked, ElementName=CantUpgradeRadioButton}" Value="True"> 
      <Setter Property="IsEnabled" Value="True"/> 
     </DataTrigger> 

     <DataTrigger Binding="{Binding Path=IsChecked, ElementName=OtherRadioButton}" Value="True"> 
      <Setter Property="IsEnabled" Value="True"/> 
     </DataTrigger> 

     </Style.Triggers> 
    </Style> 
    </Button.Style> 
</Button> 

注意,當您選中一個單選按鈕,然後會被永久啓用,因爲你無法取消所有單選按鈕組(不是通過點擊)

也沒有,如果你正在使用MVVM方法和按鈕的工作綁定到viewModel的Command屬性,則Button.IsEnabled將基於該命令的CanExecute方法的結果