2017-05-06 4 views
2

J'ai un onglet de contrôle dans lequel j'ajoute des éléments d'onglet par programmation. Je veux avoir un bouton de fermeture avec chaque élément de l'onglet. Sur googler je trouve ci-dessous le code XAML pour elle:Modifier le bouton XAML en C#

<Button Content="X" Cursor="Hand" DockPanel.Dock="Right" 
     Focusable="False" FontFamily="Courier" FontSize="9" 
     FontWeight="Bold" Margin="5,0,0,0" Width="16" Height="16" />  

Maintenant, je suis en ce code convertissent code équivalent C# et aux prises avec certaines des propriétés. Ci-dessous donné le code que j'ai jusqu'à maintenant.

var CloseButton = new Button() 
{ 
    Content = "X", 
    Focusable = false, 
    FontFamily = FontFamily = new System.Windows.Media.FontFamily("Courier"), 
    FontSize = 9, 
    Margin = new Thickness(5, 0, 0, 0), 
    Width = 16, 
    Height = 16 
};  

Je veux de l'aide avec des propriétés comme Cursor, DockPanel.Dock. Toute aide à ce sujet est très appréciée. Merci !

+2

Prenez oeil à cette https://msdn.microsoft.com/en-us /library/system.windows.controls.button(v=vs.110).aspx La seule propriété dont vous avez besoin et que je n'ai pas trouvée est DockPanel.Dock. Je pense que vous utilisez System.Windows.Forms.Button au lieu de System.Windows.Controls.Button –

+2

DockPanel.Dock peut être géré via un objet DockPanel. Voir l'utilisation dans [ce] (https://msdn.microsoft.com/en-us/library/system.windows.controls.dockpanel.dock (v = vs.110) .aspx) pour la référence – YashTD

+0

Et comme YashTD a écrit le Dock Panel peut être manipulé de cette manière DockPanel.SetDock (CONTROL_NAME, Dock.Right); –

Répondre

6

Les curseurs sont un ensemble de types assez standard. Il y a des classes statiques là-bas qui vous donnent accès à beaucoup d'entre eux. Utilisez la classe Cursors pour obtenir le Hand.

DockPanel.Dock est une propriété jointe, ce n'est pas une propriété du contrôle de bouton. Vous devez utiliser les paramètres de propriété pour cet objet de dépendance ou d'autres méthodes de commodité si disponibles.

var button = new Button 
{ 
    Content = "X", 
    Cursor = Cursors.Hand, 
    Focusable = false, 
    FontFamily = new FontFamily("Courier"), 
    FontSize = 9, 
    Margin = new Thickness(5, 0, 0, 0), 
    Width = 16, 
    Height = 16 
}; 
// this is how the framework typically sets values on objects 
button.SetValue(DockPanel.DockProperty, Dock.Right); 
// or using the convenience method provided by the owning `DockPanel` 
DockPanel.SetDock(button, Dock.Right); 

Ensuite, pour définir les liaisons, créer l'objet de liaison approprié et le transmettre à la méthode SetBinding de l'élément:

button.SetBinding(Button.CommandProperty, new Binding("DataContext.CloseCommand") 
{ 
    RelativeSource = new RelativeSource { AncestorType = typeof(TabControl) }, 
}); 
button.SetBinding(Button.CommandParameterProperty, new Binding("Header")); 
+0

Obtenir l'erreur sur button.SetValue: Une exception non gérée de type 'System.ArgumentException' s'est produite dans WindowsBase.dll Informations complémentaires: 'System.Windows.Data.Binding' n'est pas une valeur valide pour la propriété 'Command'. –

+1

@NareshRavlani Cela devrait être SetBinding au lieu de SetValue. – Clemens

+0

Désolé pour l'erreur. J'ai VM et CloseCommand. Je pense que j'ai besoin de café: P –