■86635 / inTopicNo.1) |
xamlのコントロールの動的な作成について |
□投稿者/ poke (1回)-(2018/02/24(Sat) 03:54:25)
|
分類:[.NET 全般]
分類:[.NET 全般]
お世話になっております。 C#とxamlを勉強してる者なのですが C#WPFについての質問です。
下記の動作を行いたいのですが、 例外「型 'System.InvalidOperationException' のハンドルされていない例外が PresentationFramework.dll で発生しました 指定された要素は、既に別の要素の論理子です。まず接続を切断してください」。
が発生しうまくいきません。 ネットなどを調べてみたのですが原因が分からずとなっている状況です。 どうかご指導とご鞭撻のほどよろしくお願いいたします。
・行いたい動作 1:TextBox1に値を入力し登録ボタンを押下 2:TextBox1の値をTextBox2に入れる 3:1を行うたびにTextBox2が動的に作成される(下に追加されていく)
TextBox1とTextBox2は下記になります。 ※x:Name="textvalue" → TextBox1 x:Name="textinsertvalue" → TextBox2
以下、コードとなります。 ※削除ボタンと編集ボタンはまだ処理を記載していません。
・xaml <Window x:Class="WpfApp1.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:WpfApp1" mc:Ignorable="d" Title="登録画面" Height="500.914" Width="743.033"> <Window.Resources> <!-- Textbox2スタイル --> <Style x:Key="TextBox2Style" TargetType="{x:Type TextBox}"> <Setter Property="FontSize" Value="12"/> <Setter Property="Width" Value="200"/> <Setter Property="Margin" Value="10,190,0,0" /> <Setter Property="Height" Value="30"/> </Style> <!-- Textbox1スタイル --> <Style x:Key="TextBox1Style" TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextBox2Style}"> <Setter Property="Height" Value="20"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Margin" Value="10,100,0,0" /> <Setter Property="Width" Value="200"/> </Style> <!-- Buttonスタイル --> <Style x:Key="Default1Button" TargetType="{x:Type Button}"> <Setter Property="FontSize" Value="17"/> <Setter Property="Content" Value="登録"/> <Setter Property="Margin" Value="1,-140,200,100"/> <Setter Property="Height" Value="50"/> <Setter Property="Width" Value="70"/> </Style> <!-- Buttonスタイル --> <Style x:Key="Default2Button" TargetType="{x:Type Button}" BasedOn="{StaticResource Default1Button}"> <Setter Property="Content" Value="削除"/> <Setter Property="Margin" Value="210,-150,210,100"/> </Style> <!-- Buttonスタイル --> <Style x:Key="Default3Button" TargetType="{x:Type Button}" BasedOn="{StaticResource Default1Button}"> <Setter Property="Content" Value="編集"/> <Setter Property="Margin" Value="390,-170,200,80"/> </Style> </Window.Resources>
<Grid x:Name="grid1"> <StackPanel> <TextBox x:Name="textvalue" Style="{StaticResource TextBox1Style}" ></TextBox> <TextBox x:Name="textinsertvalue" Style="{StaticResource TextBox2Style}" ></TextBox> <Button Style="{StaticResource Default1Button}" Click="Button_Click"></Button> <Button Style="{StaticResource Default2Button}" Click="Button_Click_1"></Button> <Button Style="{StaticResource Default3Button}" Click="Button_Click_2"></Button> </StackPanel> </Grid> </Window>
・xaml.cs public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
private void Button_Click(object sender, RoutedEventArgs e) { var value = textvalue.Text;
if (value == null) { MessageBox.Show("登録内容を入力してからボタンを押下してください。"); } else { //テキスト内容をxmlに出力するメソッド呼出 Class2 class2 = new Class2(); class2.Xmlwrite(value);
//TextBox1の内容をTextBox2にコピー textinsertvalue.Text = value;
//動的にTextBoxを作成 //★ここで上記記載の例外発生★ grid1.Children.Add(textinsertvalue);
//MessageBox.Show("登録が完了しました。"); } }
|
|