2016-09-27 3 views
2

J'ai une SplitButton dans ma fenêtre WPF, qui est empruntée à la boîte à outils WPF étendue de Xceed. Son contenu déroulant est composé de quelques RadioButton s. Quelque chose comme:WPF- Comment masquer un menu déroulant après avoir cliqué sur

<Window x:Class="WpfTest.Test3" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:tk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit" 
     Title="Test3" Height="300" Width="300"> 
    <Grid Height="25" Width="150"> 
     <tk:SplitButton Content="Default Command"> 
      <tk:SplitButton.DropDownContent> 
       <StackPanel> 
        <RadioButton Content="Default Command" GroupName="variations" Margin="5" IsChecked="True"/> 
        <RadioButton Content="Alternate Command 1" GroupName="variations" Margin="5"/> 
        <RadioButton Content="Alternate Command 2" GroupName="variations" Margin="5"/> 
       </StackPanel> 
      </tk:SplitButton.DropDownContent> 
     </tk:SplitButton> 
    </Grid> 
</Window> 

qui génère quelque chose comme ceci:

test

Le problème est, quand je clique sur chacun des RadioButton du menu déroulant ne disparaitra pas. J'ai fait un peu de googling et j'ai réalisé que je devrais gérer l'événement Click pour chaque RadioButton. Mais je ne sais pas comment cacher le menu déroulant dans ce gestionnaire d'événements. En note, il semble qu'il y ait un MenuItemhas the property ofStaysOpenOnClick, mais il n'y en a pas pour d'autres contrôles.

Bien que faire cela par programme suffirait, mais y a-t-il un moyen MVVM pour cela?

+1

Pas exactement une solution à votre problème, mais pourquoi préférez-vous radiobuttons sur une dropdownlist? –

+0

@Zure Qu'est-ce qu'une liste déroulante? le 'SplitButton' a une propriété' DropDownContent', qui peut soit être remplie avec 'MenuItem's ou quelque chose comme celui que j'ai essayé. Je n'ai pas compris ce que vous voulez dire –

+0

désolé, ce que je voulais dire est un ComboBox: https://www.dotnetperls.com/combobox-wpf –

Répondre

1

Ajouter un événement coché sur votre bouton radio et utiliser SplitoButton.IsOpen=false;. Suivez ce code.

Xaml

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:tk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <tk:SplitButton Name="SplitButton" Content="Default Command"> 

      <tk:SplitButton.DropDownContent> 

       <StackPanel> 
        <RadioButton Checked="rb_Checked" Content="Default Command" GroupName="variations" Margin="5" IsChecked="True"/> 
        <RadioButton Checked="rb_Checked" Content="Alternate Command 1" GroupName="variations" Margin="5"/> 
        <RadioButton Checked="rb_Checked" Content="Alternate Command 2" GroupName="variations" Margin="5"/> 
       </StackPanel> 

      </tk:SplitButton.DropDownContent> 
     </tk:SplitButton> 
    </Grid> 
</Window> 

.cs

private void rb_Checked(object sender, RoutedEventArgs e) 
     { 
      SplitButton.IsOpen = false; 
     }