質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

2回答

7124閲覧

WPF 動的に作成したコントロールのプロパティを変更したいです。

ya_ay

総合スコア13

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/01/28 02:27

###前提・実現したいこと
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。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ChildrenプロパティをUserControlにキャストしながら列挙すればNameプロパティで探せると思います。

C#ですいませんが、LINQでやるなら↓こんな感じ。

C#

1var obj = cnv.Children.OfType<UserControl>().FirstOrDefault(c => c.Name == targetName);

あるいは、配置する時点でNameの値をキーにしてDictionary<string, UserControl>で保持しておいて
そこから探すのが簡単かもしれません。

投稿2017/01/28 04:15

oika

総合スコア425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

調べてみただけですが以下でどうでしょう(.NET Framework 2.0以上)

Dim c As Control = cnv.Controls(targetName) If c IsNot Nothing Then Dim uc as UserControl1 = CType(c, UserControl1) uc.xxxx = ... End If

VB.NETが手元にないので試せてません。間違ってたらご容赦を。

投稿2017/01/28 03:17

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問