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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

124閲覧

C# xamlファイルのエレメントの背景色をxaml.csファイルで動的に制御したい

canal

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2024/05/05 13:07

実現したいこと

下記のようにbuttonをクリックするとtextboxの背景色を黄色にしたい。
イメージ説明

発生している問題・分からないこと

SetAttributeValue関数実行前後でBackgroundの値が変わってはいるが見た目には反映されない。

該当のソースコード

MainWindow.xaml.cs

1 private void Button_Click(object sender, RoutedEventArgs e) 2 { 3 var xdoc = XDocument.Load({xamlファイルのpath}); 4 var rootnamespace = xdoc.Root.Name.Namespace; 5 var textboxes = xdoc.Root.Descendants(rootnamespace + "TextBox"); 6 foreach ( var textbox in textboxes ) 7 { 8 MessageBox.Show(textbox.Attribute("Background")?.Value); 9 textbox.SetAttributeValue("Background", "Yellow"); 10 MessageBox.Show(textbox.Attribute("Background")?.Value); 11 } 12 }

MainWindow.xaml

1 <Grid> 2 <TextBox HorizontalAlignment="Left" Height="49" Margin="91,107,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="134" Background="Gray"/> 3 <TextBox HorizontalAlignment="Left" Height="49" Margin="91,180,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="134" Background="Gray"/> 4 <Button Content="Button" HorizontalAlignment="Left" Height="55" Margin="269,107,0,0" VerticalAlignment="Top" Width="131" Click="Button_Click"/> 5 </Grid>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

SetAttributeValueの"Yellow"のところをColors.Yellowにしてみてもうまくいかなかった。

補足

特になし

TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

x:Nameを使ってはいけない縛りでしょうか?
付けてよければそのままコードビハインドで変更可能です。
x:Name ディレクティブ - XAML | Microsoft Learn

付けれないならどうにかしてGridを取得し、Childrenを列挙します。
Panel.Children プロパティ (System.Windows.Controls) | Microsoft Learn
Enumerable.OfType<TResult>(IEnumerable) メソッド (System.Linq) | Microsoft Learn

xml

1<Window 2 x:Class="Qeovauqes7y9ewz.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Title="MainWindow" 6 Width="800" 7 Height="450"> 8 <Grid x:Name="grid"> 9 <TextBox 10 x:Name="textBox1" 11 Width="134" 12 Height="49" 13 Margin="91,107,0,0" 14 HorizontalAlignment="Left" 15 VerticalAlignment="Top" 16 Background="Gray" 17 Text="TextBox" 18 TextWrapping="Wrap" /> 19 <TextBox 20 x:Name="textBox2" 21 Width="134" 22 Height="49" 23 Margin="91,180,0,0" 24 HorizontalAlignment="Left" 25 VerticalAlignment="Top" 26 Background="Gray" 27 Text="TextBox" 28 TextWrapping="Wrap" /> 29 <Button 30 Width="131" 31 Height="55" 32 Margin="269,107,0,0" 33 HorizontalAlignment="Left" 34 VerticalAlignment="Top" 35 Click="Button_Click" 36 Content="Button" /> 37 </Grid> 38</Window>

cs

1using System.Windows; 2using System.Windows.Controls; 3using System.Windows.Media; 4 5namespace Qeovauqes7y9ewz; 6 7public partial class MainWindow : Window 8{ 9 public MainWindow() => InitializeComponent(); 10 11 private void Button_Click(object sender, RoutedEventArgs e) 12 { 13 // x:Nameを付けてよければこれだけの話 14 //textBox1.Background = Brushes.Yellow; 15 //textBox2.Background = Brushes.Yellow; 16 17 // gridの子のうちTextBoxだけ列挙する 18 //var textboxes = grid.Children.OfType<TextBox>(); 19 20 // Gridもx:Name付けない縛りならこんなん?(もちろんxaml次第です) 21 var textboxes = ((Grid)Content).Children.OfType<TextBox>(); 22 23 foreach (var textbox in textboxes) 24 { 25 textbox.Background = Brushes.Yellow; 26 } 27 } 28}

アプリ動画

投稿2024/05/05 14:09

TN8001

総合スコア9396

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

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

canal

2024/05/05 15:17

いろんなパターンでの対策ありがとうございます! 試したところ問題が解決しました! x:Nameを使わなかった理由は、実際に考えているプログラムではtextboxの数が200個ほどあって名前を付けるのが大変だったからです。ただ、Gridのほうに名前を付けるというのは盲点でした! ベストアンサーに選ばせていただきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問