Come ottenere un gruppo di pulsanti di triggerszione per agire come i pulsanti di opzione in WPF?

Ho un gruppo di pulsanti che dovrebbero agire come pulsanti di triggerszione, ma anche come pulsanti di opzione in cui è ansible selezionare / premere un solo pulsante all’ora corrente. Inoltre, deve avere uno stato in cui nessuno dei pulsanti è selezionato / premuto.

Il comportamento sarà simile alla barra degli strumenti di Photoshop, in cui zero o uno degli strumenti sono selezionati in qualsiasi momento!

Qualche idea su come questo possa essere implementato in WPF?

Il modo più semplice consiste nello stile di un ListBox per utilizzare ToggleButtons per il suo ItemTemplate

 

Quindi è ansible utilizzare la proprietà SelectionMode di ListBox per gestire SingleSelect vs MultiSelect.

Questo è il modo più semplice secondo me.

  

Godere! – Pricky

        

funziona per me, divertiti!

è sempre ansible utilizzare un evento generico sul clic del ToggleButton che imposta tutto ToggleButton.IsChecked in un controllo di gruppo (Grid, WrapPanel, …) su false con l’aiuto di VisualTreeHelper; quindi ricontrolla il mittente. O qualcosa del genere.

 private void ToggleButton_Click(object sender, RoutedEventArgs e) { int childAmount = VisualTreeHelper.GetChildrenCount((sender as ToggleButton).Parent); ToggleButton tb; for (int i = 0; i < childAmount; i++) { tb = null; tb = VisualTreeHelper.GetChild((sender as ToggleButton).Parent, i) as ToggleButton; if (tb != null) tb.IsChecked = false; } (sender as ToggleButton).IsChecked = true; } 

puoi inserire la griglia con i pulsanti radio e creare pulsante come modello per i pulsanti radio. oltre alla semplice rimozione di un programma, controlla se non vuoi che i pulsanti siano triggersti

Puoi anche provare System.Windows.Controls.Primitives.ToggleButton

  Test 

Quindi scrivere il codice contro la proprietà IsChecked per simulare l’effetto del IsChecked

  private void btnTest_Checked(object sender, RoutedEventArgs e) { btn2.IsChecked = false; btn3.IsChecked = false; } 

Ehi, in realtà ho sviluppato una soluzione per questo. È ansible sovrascrivere il modello di controllo per i pulsanti di opzione e posizionare i pulsanti di stampa in basso. Ho una soluzione implementata in una libreria open source qui:

http://code.google.com/p/phoenix-control-library/

È ansible ottenere la soluzione di lavoro per l’utilizzo immediato O dare un’occhiata al codice sorgente lì.

Godere.

L’ho fatto per RibbonToggleButtons, ma forse è lo stesso per i normali ToggleButton.

Ho associato IsChecked per ogni pulsante a un valore enum “mode” usando EnumToBooleanConverter da qui Come bind i RadioButton a un enum? (Specificare il valore enum per questo pulsante utilizzando ConverterParameter. Si dovrebbe avere un valore enum per ciascun pulsante)

Quindi per evitare di deselezionare un pulsante che è già selezionato, inserisci questo codice nel codice per l’evento Click per ciascuno dei RibbonToggleButtons:

  private void PreventUncheckRibbonToggleButtonOnClick ( object sender, RoutedEventArgs e ) { // Prevent unchecking a checked toggle button - so that one always remains checked // Cancel the click if you hit an already-checked button var button = (RibbonToggleButton)sender; if( button.IsChecked != null ) { // Not sure why checked can be null but that's fine, ignore it bool notChecked = ( ! (bool)button.IsChecked ); if( notChecked ){ // I guess this means the click would uncheck it button.IsChecked = true; } } } 

Per aiutare persone come Julian e me (due minuti fa …). Puoi derivare da RadioButton come questo.

 class RadioToggleButton : RadioButton { protected override void OnToggle() { if (IsChecked == true) IsChecked = IsThreeState ? (bool?)null : (bool?)false; else IsChecked = IsChecked.HasValue; } } 

Quindi, puoi usarlo come suggeriva Uday Kiran …

      

Questo metodo consente di controllare un solo ToggleButton alla volta e consente anche UnChecking.