2013-04-16 3 views
0

Что я ищу для пользователя: 1. нажмите на холст 2. появится новая метка, и пользователь может ввести текст. 3. Когда пользователь щелкает в другом месте или нажимает Enter, надписи заканчиваются редактированием.C# Как создать ярлык onClick на холсте

Это то, что я до сих пор ...

 private void DrawingCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { 
     var canvas = (Canvas)sender; 
     var point = e.GetPosition(canvas); 
     Label lbl = new Label(); 
     lbl.Content = "start typing"; 
     //lbl.Left = location.X; 
     //lbl.Top = location.Y; 
     //lbl.Focus = Boolean.TrueString; 
     canvas.Children.Add(lbl); 
} 

Любая помощь будет принята с благодарностью, спасибо!

+0

Мы не можем редактировать в Label. Вам нужно будет использовать TextBox – ethicallogics

ответ

1

Попробуйте как этот

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Canvas x:Name="cnvs" PreviewMouseLeftButtonUp="cnvs_MouseLeftButtonUp" Background="Transparent"></Canvas> 

private void cnvs_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     var canvas = (Canvas)sender; 
     var point = e.GetPosition(canvas); 
     TextBox txtBox = new TextBox() {Width=80,AcceptsReturn=false }; 
     canvas.Children.Add(txtBox); 
     Canvas.SetLeft(txtBox, point.X); 
     Canvas.SetTop(txtBox, point.Y); 
     txtBox.Focus(); 
    } 

Я надеюсь, что это поможет.

ОБНОВЛЯТЬ:

var canvas = (Canvas)sender; 
     var point = e.GetPosition(canvas); 
     TextBox txtBox = new TextBox() {AcceptsReturn=false ,BorderThickness=new Thickness(0)}; 
     Binding b = new Binding("Text") { RelativeSource = new RelativeSource(RelativeSourceMode.Self) }; 
     txtBox.SetBinding(TextBox.WidthProperty, b); 
     canvas.Children.Add(txtBox); 
     Canvas.SetLeft(txtBox, point.X); 
     Canvas.SetTop(txtBox, point.Y); 
     txtBox.Focus(); 
+0

Alright Its почти полностью там. Поскольку я использую текстовое поле, знаю, как мне избавиться от границы? И Ширина равна тому, что я набираю? Благодаря! – Ace

+0

Вы можете сделать это со связыванием, я обновил ответ. – ethicallogics

+0

Удивительный! Именно то, что мне нужно! – Ace

1

Попробуйте установить ширину текстового поля в Double.NaN. Это даст вам «Авто» ширину. Чтобы избавиться от границы, задайте значение границы текстового поля равным 0. См. Ниже:

private void cnvs_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     var canvas = (Canvas)sender; 
     var point = e.GetPosition(canvas); 
     var txtBox = new TextBox() { Width=Double.NaN, AcceptsReturn=false }; // auto width 
     txtBox.BorderThickness = new Thickness(0); // no border 
     canvas.Children.Add(txtBox); 
     Canvas.SetLeft(txtBox, point.X); 
     Canvas.SetTop(txtBox, point.Y); 
     txtBox.Focus(); 
    } 
Смежные вопросы