2010-07-28 21 views
5

Sto tentando di duplicare i pulsanti sinistra/centro/destra della barra degli strumenti di allineamento in Word. Quando fai clic sul pulsante "Allineamento a sinistra", i pulsanti centrale e destro deselezionano. Sto usando un ListBox WPF con ToggleButtons.ToggleButton group: assicurarsi che un elemento sia sempre selezionato in un ListBox

Il problema è che l'utente può fare clic due volte sul pulsante di allineamento sinistro. Il secondo clic fa deselezionare il pulsante e imposta il valore sottostante su null. Mi piacerebbe che il secondo clic non facesse nulla.

Idee? Forzare il ListBox per avere sempre un elemento selezionato? Impedire il null nel modello di vista (è necessario aggiornare il binding ToggleButton)?

risposta

3

Sì, io preferirei il pulsante radio troppo per questo caso, ma se si desidera utilizzare ToggleButton allora forse si può associare la proprietà IsEnabled per IsChecked in modo che non possa essere cliked quando è verificato

+0

Grazie. Nell'evento OnClick: if (toggleButton.IsChecked == false) toggleButton.IsChecked = true; –

+0

err effettivamente stavo pensando più a questo tipo dnr3

0

Piuttosto che implementarlo come ToggleButtons, utilizzerei RadioButton con modelli personalizzati. Probabilmente ti farà risparmiare un sacco di mal di testa.

+0

Il RadioButton presenta altri problemi con l'associazione dati: http://geekswithblogs.net/claraoscura/archive/2008/10/17/125901.aspx. ListBox ti consente di associare le possibili scelte piuttosto che il codice. –

+0

I RadioButton hanno altri problemi: non sono deselezionati con un clic, ecc ... – ANeves

1

creare controllo personalizzato da ToggleButton , nel file * .xaml.cs, dichiarare e definire il controllo

public class ToggleButton2 : ToggleButton 
{ 
    public bool IsNotCheckable 
    { 
     get { return (bool)GetValue(IsNotCheckableProperty); } 
     set { SetValue(IsNotCheckableProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for IsNotCheckable. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty IsNotCheckableProperty = 
     DependencyProperty.Register("IsNotCheckable", typeof(bool), typeof(ToggleButton2), new FrameworkPropertyMetadata((object)false)); 

    protected override void OnToggle() 
    { 
     if(!IsNotCheckable) 
     { 
      base.OnToggle(); 
     } 
    } 
} 

in * XAML, sostituire ToggleButton con il mio: ToggleButton2, allora è possibile associare a IsNotCheckable IsChecked, proprio come qui di seguito,

   <my:ToggleButton2 IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" IsNotCheckable="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Mode=OneWay}">   
Problemi correlati