###前提・実現したいこと
WPFで 動的に作成したコントロールのプロパティを変更したいです。
①ユーザコントロール(UserControl1)に図形のテンプレートがあります。
②それを動的にcanvasに配置します(いくつ配置するかわからないので動的)
・テキストボックスに入力された数値でRectangleの大きさを決める。
・ あとでアクセスしたいのでNameプロパティに名前を付けている。 A001とかA002とか。
③テキストボックスで名前を指定して、nameの名前で配置したコントロールのプロパティを変更したい。
仮にWidthを2倍にしてみる。
###発生している問題
②の配置まではできます。
その後、③でName指定したいのですが、どう記述したらよいのかわかりません。
そもそのNameプロパティにつけた名前ではダメしょうか。
item番号を指定すればできました。
obj = cnv.Children.Item(0)
ここを名前で指定したいのですが、
obj = cnv.FindName(targetName)
これではnothingとなり指定できませんでした。
###該当のソースコード
フォームの部分
●VB
Class MainWindow 'ボタンを押したとき配置する Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click Dim a As Integer = A_tb.Text Dim b As Integer = B_tb.Text Dim Num As Integer = num_tb.text Dim obj As New UserControl1(a, b, Num) cnv.Children.Add(obj) End Sub 'ボタンを押したとき変更する Private Sub changeBtn_Click(sender As Object, e As RoutedEventArgs) Handles button_Copy.Click Dim obj As UserControl1 Dim targetName As String = "A" + num_tb.Text obj = cnv.FindName(targetName)'←うまくできない。obj がnothingになる obj = cnv.Children.Item(4) '←これだとできる。ただ動的に生成されたindex番号がわからない。 obj.shikaku.Height = obj.shikaku.Height * 2 End Sub End Class
ユーザーコントロールの部分
●VB
Public Class UserControl1 Public Sub New(ByVal a As Integer, ByVal b As Integer, ByVal no As Integer) InitializeComponent() shikaku.Width = a shikaku.Height = b Dim name = "A" + no.ToString Me.Name = name End Sub End Class
●XAML
<UserControl x:Class="UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApplication8" mc:Ignorable="d" Height="130" Width="155"> <Grid x:Name="grid"> <Rectangle x:Name="shikaku" Fill="Aqua" HorizontalAlignment="Left" Height="70" Margin="10,10,0,0" Stroke="Black" VerticalAlignment="Top" Width="70" RenderTransformOrigin="-0.643,0.5"/> </Grid> </UserControl>
###補足情報(言語/FW/ツール等のバージョンなど)
Visual studio 2015 community。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。