0

そのため、C# クラスで使用したい要素がいくつかあります。これらは、要素を抽出したい xaml ドキュメントの数行です。

    <TextBlock x:Name="diastolic17" FontSize="10" Foreground="Ivory" Grid.Row="19"
             Grid.Column="4"
             TextAlignment="Center">0</TextBlock>
    <TextBlock x:Name="diastolic18" FontSize="10" Foreground="Ivory" Grid.Row="20"
             Grid.Column="4"
             TextAlignment="Center">98</TextBlock>
    <TextBlock x:Name="diastolic19" FontSize="10" Foreground="Ivory" Grid.Row="21"
             Grid.Column="4"
             TextAlignment="Center">88</TextBlock>

それらはすべて同じ名前空間にあります。以前は x:Name プロパティを使用して TextBlocks を取得していましたが、問題は、TextBlocks の膨大なリストがあることです。それを行う唯一の方法は、各 Textblocks の名前を入力することだと思います。誰かがこれをどのように処理するかを明確にできたら? シンプルなソリューションが好まれます。私は初心者のプログラマーであり、これは学校のプロジェクト用です。

4

2 に答える 2

1

メソッドを使用しますFindVisualChildren。ビジュアル ツリーをトラバースし、目的のコントロールを見つけます。

これでうまくいくはずです

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
        if (child != null && child is T)
        {
            yield return (T)child;
        }

        foreach (T childOfChild in FindVisualChildren<T>(child))
        {
            yield return childOfChild;
        }
    }
}
}

次に、次のようにコントロールを列挙します

foreach (TextBlock tb in FindVisualChildren<TextBlock>(window))
{
    // do something with tb here
}
于 2013-05-12T12:43:01.037 に答える
0

多数のコントロールを参照する必要がある場合は、それらを 1 つのコントロール (スタックパネル、グリッドなど) にグループ化し、コンテナーの子コントロールを列挙してコントロールにアクセスできます。

別の方法は、データ バインディングを使用することです。そうすれば、おそらくコントロールをまったく参照する必要がなくなります。

于 2013-05-12T15:59:03.740 に答える