-3
私はキャンバスにたくさんの線を持っています。私はちょうどを検出するを検出する行がをクリックとWP30の子供からを削除しますか?任意の解決 ありがとうございます。キャンバスからラインを検出する方法とWPFで取り除く方法
私はキャンバスにたくさんの線を持っています。私はちょうどを検出するを検出する行がをクリックとWP30の子供からを削除しますか?任意の解決 ありがとうございます。キャンバスからラインを検出する方法とWPFで取り除く方法
まず、キャンバスにMouseLeftButtonDownイベントを追加し、WPFにKeyDownイベントを追加する必要があります。
public MainWindow()
{
InitializeComponent();
MyCanvas.MouseLeftButtonDown += MyCanvas_MouseLeftButtonDown;
this.KeyDown += MainWindow_KeyDown;
}
左のマウスが線の1つをクリックすると、選択が強調表示されます。他の何かをクリックすると、前の選択を強調表示しなくてはなりません。
private Line _selectedLine;
private void MyCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
object testPanelOrUi = InputHitTest(e.GetPosition(this)) as FrameworkElement;
// if the selection equals _selectedLine, i.e. the line has been selected already
if (Equals(testPanelOrUi, _selectedLine)) return;
// The selection is different.
// if _selectedLine is not null, revert color change.
if (_selectedLine != null)
{
UnHighlightSelection();
}
// if testPanelOrUi is not a line.
if (!(testPanelOrUi is Line)) return;
// The selection is different and is a line.
_selectedLine = (Line) testPanelOrUi;
HighlightSelection(_selectedLine);
}
あなたHighlightSelection()
とUnHighlightSelection()
は、以下同様とすることができる。
private void HighlightSelection(Line selectedob)
{
selectedob.Stroke = Brushes.Red;
}
private void UnHighlightSelection()
{
//if nothing has been selected yet.
if (_selectedLine == null) return;
_selectedLine.Stroke = Brushes.Black;
_selectedLine = null;
}
次に、あなたがあなたのDelete
とKeyDown
アクションを定義することができます。 Deleteキーを押すと、選択を削除する必要があります。
private void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
DeleteLine();
}
}
public void DeleteLine()
{
//if nothing has been selected yet.
if (_selectedLine == null) return;
//if the selection has been deleted.
if (!MyCanvas.Children.Contains(_selectedLine)) return;
UnHighlightSelection();
MyCanvas.Children.Remove(_selectedLine);
}
えええええええええええええええええええええええええええええええええええええええん@Anthony – Ahmad