Est-ce un contrôle basé sur un modèle? Si ce n'est pas le cas, vous devriez pouvoir ajouter une étiquette de nom, x:Name="txtTextbox"
, puis l'adresser directement, txtTextBox.SelectedText
.
Puisqu'il s'agit d'un contrôle basé sur un modèle, vous n'avez pas d'accès direct via le nom. Donc, dans votre code-behind, vous pouvez utiliser une méthode comme celle-ci qui trouvera le premier parent de l'élément spécifié d'un type particulier (TextBox). Placez la méthode suivante dans une classe d'aide, ou dans votre code existant:
/// <summary>
/// Finds a parent of a given item on the visual tree.
/// </summary>
/// <typeparam name="T">The type of the queried item.</typeparam>
/// <param name="child">A direct or indirect child of the
/// queried item.</param>
/// <returns>The first parent item that matches the submitted
/// type parameter. If not matching item can be found, a null
/// reference is being returned.</returns>
public static T TryFindParent<T>(this DependencyObject child)
where T : DependencyObject
{
//get parent item
DependencyObject parentObject = GetParentObject(child);
//we've reached the end of the tree
if (parentObject == null) return null;
//check if the parent matches the type we're looking for
T parent = parentObject as T;
if (parent != null)
{
return parent;
}
else
{
//use recursion to proceed with next level
return TryFindParent<T>(parentObject);
}
}
Ensuite, vous faites juste ce code dans votre gestionnaire d'événements de code:
MenuItem menuItem = sender as MenuItem;
if(menuItem!=null)
{
TextBox textBox = menuItem.TryFindParent<TextBox>();
if(textBox!=null)
{
string selectedText = textBox.SelectedText;
}
}
Cette méthode est utile dans plusieurs de mes projets , donc je crée une classe UIHelper que je mets ce genre de choses dans ...
Bonne chance,
Jason