Avant de commencer à pirater une solution vraiment grossière, je pensais voir si quelqu'un pouvait me donner un petit coup de pouce dans la bonne direction. Ce que je veux vraiment faire est de laisser un utilisateur sélectionner du texte dans un RichTextBox, cliquer sur un bouton, et convertir ce texte en un contrôle rendu personnalisé. Convertissez-le en un bouton contenant le texte qu'ils ont sélectionné, par exemple.WPF RichTextBox - Remplacer le texte sélectionné par un contrôle personnalisé
Répondre
Vous pouvez le faire avec commande et CommandParameter
D'abord, lier le bouton à un ICommand, comme:
<Button Content="Go" Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=myRichTextBox, Path=Selection}" />
<RichTextBox Name="myRichTextBox" />
Ensuite, dans votre ViewModel ou contrôleur ou code-behind ou ailleurs, vous exposez la ICommand comme une propriété, et le pointer vers une méthode pour faire le travail, comme ...
public ICommand MyCommand
{
get
{
if (_queryCommand == null)
{
_queryCommand = new RelayCommand<TextSelection>(DoWork);
}
return _queryCommand;
}
}
private void DoWork(TextSelection param)
{
string selectedText = param.Text;
// Build your control here...
// probably put it in an ObservableCollection<Control> which is bound by an Items Control, like a ListBox
}
note: J'ai utilisé le RelayCommand de Josh Smith excellente MVVM Foundation, mais vous pouvez également utiliser un RoutedUICommand par exemple (ce qui ajouterait l'avantage de vous permettre d'associer des gestes d'entrée à votre commande)
Vous aurez besoin d'écrire du code qui prendra votre sélection et l'enrobera dans un InlineUIContainer - voilà comment vous obtenez des contrôles dans une zone de texte riche:
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run>Fo</Run>
<InlineUIContainer>
<Button IsEnabled="True">oB</Button>
</InlineUIContainer>
<Run>ar</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
Hey Rob :) Huh .. il ne m'est jamais venu à l'esprit qu'il pourrait vouloir le contrôle * dans * la RichTextBox ... belle réponse :) – kiwipom
Je suppose que je n'étais pas assez clair sur ma question. Ceci est évidemment trivial dans XAML, mais ma question était de savoir comment programmer par l'utilisateur en sélectionnant 'oB' quand il n'y en a qu'un
@IanR merci, très utile! – msfanboy
- 1. Remplacer le texte dans WPF Richtextbox
- 2. Set texte RTF en WPF RichTextBox contrôle
- 3. WPF RichTextBox ne supprime pas le texte
- 4. Détermination du InlineUIContainer sélectionné dans un fichier WPF RichTextBox
- 5. Propriété de texte personnalisé WPT RichTextBox
- 6. VB.NET - RichTextBox - Appliquer la mise en forme au texte sélectionné
- 7. WPF Richtextbox FontFace/FontSize
- 8. Comment utiliser le contrôle RichTextBox?
- 9. WPF richTextBox question
- 10. Remplacer le bureau par l'application WPF
- 11. Contrôle personnalisé wpf non reconnu
- 12. Supprimer le texte de RichTextBox
- 13. Comment remplacer uniquement ItemTemplate dans le contrôle personnalisé
- 14. Récupérer le texte sélectionné à partir d'un contrôle de navigateur Web dans un
- 15. WPF: Erreur lors de l'utilisation d'un contrôle personnalisé dans le ItemTemplate d'un autre contrôle personnalisé
- 16. Importation de XAML dans WPF RichTextBox
- 17. Comment remplacer le texte actuellement sélectionné dans une zone de texte html?
- 18. Winform create table dans le contrôle RichTextBox
- 19. Utilisation d'un contrôle WPF personnalisé dans WinForms
- 20. Force un contrôle WPF personnalisé pour redimensionner correctement
- 21. ContextMenuStrip on Contrôle utilisateur contenant Richtextbox C#
- 22. Problème de style de contrôle personnalisé WPF
- 23. jQuery définir le texte sélectionné
- 24. Winforms RichTextBox Taille du texte?
- 25. Comment forcer le mode insertion dans un fichier WPF RichTextBox
- 26. personnalisé WPF Lookless contol ... Dynamiquement Décider le type de contrôle
- 27. Modèle de contrôle personnalisé Wpf - taille de police relative
- 28. Récupération du texte sélectionné du contrôle Webbrowser dans .net (C#)
- 29. C#: rotation du texte dans un contrôle personnalisé
- 30. Tutoriel WPF pour la création d'un contrôle utilisateur personnalisé
Désolé, comme un ajout ... J'ai juste essayé et a échoué à se lier à la Selection.Path du contrôle RTB, mais si je pavent la voie = Sélection , et faites ma commande RelayCommand de type System.Windows.Documents.TextSelection (et faites en sorte que mon gestionnaire prenne un paramètre du même type) cela fonctionne bien ... Je mettrai à jour le code ci-dessus pour vous montrer ce que je veux dire :) – kiwipom