前提・実現したいこと
(無知なため、誤った用語の使い方をしていたら申し訳ありません。)
現在、練習も兼ねて自分用で某ゲームの簡単な補助ツールを制作しています。
エンドユーザ側で編集を行いたいTextBlockを沢山配置するため、コンテキストメニューから、何らかの方法でクリックした部分にあるTextBlockを編集できるようにする方法を教えていただきたいです。
また、可能であれば時刻の記録や計算も行いたいため、そういった物も同様に扱える方法が望ましいです。
「多少操作方法が変わるが、容易に実装できる」といった方法でも構いません。
よろしくお願いします。
該当のソースコード
MainWindow.xaml
<Window x:Class="Kuro.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Kuro" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock HorizontalAlignment="Left" Margin="120,10,0,0" TextWrapping="Wrap" Text="Sun" VerticalAlignment="Top"/> <Grid HorizontalAlignment="Left" Height="18" Margin="80,30,0,0" VerticalAlignment="Top" Width="100"> <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="18" VerticalAlignment="Top" Width="100"> <Border.ContextMenu> <ContextMenu> <MenuItem Header="キャラ名編集" Click="CName_Edit"/> </ContextMenu> </Border.ContextMenu> <TextBlock TextWrapping="Wrap" x:Name="Chara1" Text="キャラ1" HorizontalAlignment="Center"/> </Border> </Grid> <TextBlock HorizontalAlignment="Left" Margin="228,10,0,0" TextWrapping="Wrap" Text="Mon" VerticalAlignment="Top"/> <Grid HorizontalAlignment="Left" Height="18" Margin="190,30,0,0" VerticalAlignment="Top" Width="100"> <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="18" VerticalAlignment="Top" Width="100"> <Border.ContextMenu> <ContextMenu> <MenuItem Header="キャラ名編集" Click="CName_Edit"/> </ContextMenu> </Border.ContextMenu> <TextBlock TextWrapping="Wrap" x:Name="Chara2" Text="キャラ2" HorizontalAlignment="Center"/> </Border> </Grid> (中略) </Grid> </Window>
MainWindow.xaml.cs
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15 16namespace Kuro 17{ 18 /// <summary> 19 /// MainWindow.xaml の相互作用ロジック 20 /// </summary> 21 public partial class MainWindow : Window 22 { 23 public MainWindow() 24 { 25 InitializeComponent(); 26 27 } 28 29 /// <summary> 30 /// キャラ名編集 31 /// </summary> 32 /// <param name="sender"></param> 33 /// <param name="e"></param> 34 public void CName_Edit(object sender, RoutedEventArgs e) 35 { 36 37 //キャラ名入力 38 string CName = Microsoft.VisualBasic.Interaction.InputBox("", "キャラ名入力", Chara1.Text, -1, -1); 39 Chara1.Text = CName; //ここでChara2以降にも代入したい 40 } 41 } 42} 43
試したこと
foreach(var child in LogicalTreeHelper.GetChildren(this))
でTextBlockを取得し、InputBoxに入力した物を代入しようとした- コンテキストメニューの親Gridを取得し、その子コントロールとしてTextBlockを生成しようとした(知識不足で断念)
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2017 version 15.9.5
Microsoft .NET Framework version 4.7.03056
回答2件
あなたの回答
tips
プレビュー