0

編集:

8年後、この方法を使用しないでください!

WPFとデータバインディングについて学ぶことに時間を費やしてください。

この質問がどこから来たのかを知る必要がありますか?編集ボタンをクリックします。

4

4 に答える 4

2

ボタンの名前がButton1、Button2、Button3...のようになっている場合。

ここで使用できますFindChild<T>()
メソッドを取得します

for(int i =0; i< SPItems.Count;i++) // iterates for each item in your SPItems
{
     Button foundButton =  UIHelper.FindChild<Button>(Application.Current.MainWindow, "Button"+i);

     if(foundButton != null) //Protecteted agains trying to use Null-Reference
     {
          var foundButtonTextBlock =foundButton .Content as TextBlock

          if(foundButtonTextBlock != null)//Protecteted agains trying to add Text by Null-Reference
               foundButtonTextBlock.Text  = SPItems[i];
     }
}

編集

通常の方法として:

 for(int i =0; i< SPItems.Count;i++) // iterates for each item in your SPItems
    {
         TextBlock foundTextBlock =  UIHelper.FindChild<TextBlock>(this, "SubItem"+1+i+"txt");

         if(foundTextBlock != null) //Protecteted agains trying to add Text by Null-Reference
         {
              foundTextBlock .Text  = SPItems[i];
         }
    }

痛みを伴う方法として:

int i =0;
if(SPItems.Count >0)
{
    SubItem1txt.Text = SPItems[i]; 
    i++;
}
if(SPItems.Count >1)
{
    SubItem2txt.Text = SPItems[i];
    i++;
}
if(SPItems.Count >2)
{
    SubItem3txt.Text = SPItems[i];
    i++;
}
if(SPItems.Count >3)
{
    SubItem4txt.Text = SPItems[i]; 
    i++;
}
if(SPItems.Count >4)
{
    SubItem5txt.Text = SPItems[i]; 
    i++;
}
if(SPItems.Count >0)
{
    SubItem6txt.Text = SPItems[i];
    i++;
}
if(SPItems.Count >5)
{
    SubItem7txt.Text = SPItems[i];
    i++;
}
if(SPItems.Count >6)
{
    SubItem8txt.Text = SPItems[i];
    i++;
}
//..... never ever do this
于 2013-03-15T08:19:02.943 に答える
1

これらの単純なタスクのコードでUI要素を操作しないでください。これは、あなたが求めていることを行うためのWPFの方法です。

<Window x:Class="WpfApplication4.Window18"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window18" Height="300" Width="300">
    <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Content="{Binding}" Margin="2"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Window>

コードビハインド:

using System.Windows;
using System.Linq;

namespace WpfApplication4
{
    public partial class Window18 : Window
    {
        public Window18()
        {
            InitializeComponent();

            DataContext = Enumerable.Range(0, 20).Select(x => "Item" + x);
        }
    }
}

これは私の画面でどのように見えるかです:

ここに画像の説明を入力してください

于 2013-03-14T21:21:27.170 に答える
0

これは一種の汚い解決策ですが、フォーム上のすべてのボタンを操作する場合は、それだけの価値があります。私が知っている最も簡単な方法は、すべてのボタンをArrayList(はい、手動で、それは面倒な部分です)に追加してから、そのリストをループすることです。

于 2013-03-14T21:07:27.550 に答える
0

WiiMaxxのおかげで私は解決策を見つけました!

この方法を使用すると、データベースから取得したデータを使用してボタンのテキストを正常に設定できます。

foreachループになりましたが、今では必要に応じて正確に機能します。編集:forバージョンを見つけました

私はWrapPanel、を含み、buttonsそこに再び私のを含みますTextBlock's

私は(例:)でTextBlock's始まるのではなく0、余分なを作成する必要があったためです。これが誰かに役立つことを願っています。1SubItem1txtint

みんなありがとう :) !

foreachバージョン:

int i = 1;
int a = 0;
foreach (string spi in SPItems)
    {
        WrapPanel pnl = UIHelper.FindChild<WrapPanel>(this, "SubItems");
        Button btn = UIHelper.FindChild<Button>(pnl, "SubItem" + i);
        TextBlock tb = UIHelper.FindChild<TextBlock>(btn, "SubItem" + i + "txt");
        btn.Visibility = Visibility.Visible;
        tb.Text = SPItems[a];
        a++;
        i++;
    }

バージョンの場合:

    int i = 1;
    for (int a = 0; a < SPItems.Count; a++)
    {
        WrapPanel pnl = UIHelper.FindChild<WrapPanel>(this, "SubItems");
        Button btn = UIHelper.FindChild<Button>(pnl, "SubItem" + i);
        TextBlock tb = UIHelper.FindChild<TextBlock>(btn, "SubItem" + i + "txt");
        btn.Visibility = Visibility.Visible;
        tb.Text = SPItems[a];
        i++;
    }
于 2013-03-15T15:22:57.400 に答える