2009-10-23 10 views
0

J'ai tout un tas de code qui dépend du type ComboBox, et je veux être capable de l'utiliser sur une nouvelle interface, mais l'interface utilisateur que je veux utiliser pour ressembler à un RadioButton pour des raisons d'utilisabilité . Est-il possible d'avoir un contrôle ComboBox ressembler à un ensemble de RadioButtons?Dans WPF, est-il possible d'avoir un contrôle de zone de liste déroulante, qui ressemble à un RadioButton?

+0

Pourquoi ne pas faire tout un tas de boutons radio? – snicker

+0

Je ne veux pas ajouter beaucoup de boutons radio, parce que cela signifierait plus de code, et tout mon autre code qui est construit autour des contrôles ComboBox ne fonctionnerait plus pour interagir avec lui. Si je pouvais simplement utiliser un ComboBox pour ressembler à des boutons radio, ce serait le meilleur. – skb

+0

Qu'est-ce qui vous lie actuellement à la ComboBox? Est-ce un Enum? –

Répondre

2

Ma suggestion serait d'utiliser un ItemsControl avec un DataTemplate qui rendrait RadioButtons. Pour ItemsControl, vous lieriez la même chose que vous liez au ComboBox. Une des réserves est que vous devez définir le GroupName des boutons radio sur quelque chose qui serait le même pour le groupe, donc ils peuvent être mutuellement exclusifs. Sinon, si vous ne faites rien, vous serez en mesure de sélectionner plus d'un RadioButton simultanément.

+0

Merci! C'est assez proche! – skb

0

Vous pouvez créer un nouveau UserControl qui a plusieurs des mêmes méthodes que la classe ComboBox, mais l'adapter pour qu'il crée plusieurs zones radio à la place.

Votre question est un peu vague. IE créer une collection Items sur votre contrôle utilisateur, et quand quelque chose est ajouté, dessinez une boîte radio et redimensionnez votre contrôle, au lieu de ce que fait une zone de liste déroulante et ajoute simplement une chaîne à la liste. Ensuite, il vous suffit de rechercher et de remplacer toutes vos références à ComboBox par RadioIFiedComboBox.

Heres une comparaison:

ComboBox cb = new ComboBox(); 
cb.Items.Add("blah"); 

ou

RadioIFiedComboBox cb = new RadioIFiedComboBox(); 
cb.Items.Add("blah"); 

et

public class RadioIFiedComboBox : UserControl { 
    public ObservableCollection<object> Items = new ObservableCollection<object>(); 
    public RadioIFiedComboBox() { 
    Items.CollectionChanged += new NotifyCollectionChangedEventHandler(YourCollectionChanged); 
    } 
    private void YourCollectionChanged(){ 
    //do something here to redraw your controls 
    } 
} 

Le code ci-dessus est juste un exemple, vous devez créer toutes les méthodes que vous utilisez dans la classe ComboBox et créez des fonctionnalités similaires.