3

5 つの child を持つ Stackpanel があります。

    <StackPanel Orientation="Horizontal">
        <TextBlock >1</TextBlock>
        <TextBlock >2</TextBlock>
        <TextBlock >3</TextBlock>
        <TextBlock >4</TextBlock>
        <TextBlock >5</TextBlock>
    </StackPanel>

child[2]の位置を変更したい。

実行時に要素の位置を変更するにはどうすればよいですか?

4

2 に答える 2

4

これは、StackPanel の Children プロパティの index 要素を追跡することで実現できます。この動作を示すサンプル コードをお送りします。たとえば、次のコードを考えてみましょう。

    int currentSelectedIndex = stackPanel1.Children.IndexOf(CurrentSelectedTextBlock);
    int downIndex = currentSelectedIndex + 1;
    int childCount = stackPanel1.Children.Count;
    if (downIndex < childCount)
    {
        stackPanel1.Children.RemoveAt(currentSelectedIndex);
        stackPanel1.Children.Insert(downIndex, CurrentSelectedTextBlock);
    }
    else if (downIndex == childCount)
    {
        stackPanel1.Children.RemoveAt(currentSelectedIndex);
        stackPanel1.Children.Insert(currentSelectedIndex, CurrentSelectedTextBlock);
    }

現在選択されている TextBlock を取得し、そのインデックスを 1 つ上に移動します。次に、StackPanel の Children-property を削除して再度挿入し、更新する必要があります。

この種の目的で StackPanel を使用するかどうかは疑問です。T の ObservableCollection にバインドできるため、ListBox のような ItemsControl を使用する方がはるかに簡単です。バインドされたコレクションが更新されると、コントロールも同様に更新されます。

これが役立つことを願っています。サンプルコードはこちらからダウンロードできます。

于 2012-10-23T19:35:15.150 に答える
0

意図があまり具体的に示されていないため、質問はやや不明確です。次のコードでは、Text-content-property に基づいて TextBlock を移動できます。

        string number = "4";
    TextBlock textBlockToSearch = null;

    foreach (var child in stackPanel1.Children)
    {
        if (child is TextBlock)
        {
            var textBlock = (TextBlock) child;
            if (textBlock.Text.CompareTo(number) == 0)
                textBlockToSearch = textBlock;
        }
    }

    if (textBlockToSearch != null)
    {
        stackPanel1.Children.Remove(textBlockToSearch);
        int pos = 2;
        stackPanel1.Children.Insert(pos - 1, textBlockToSearch);
    }
    else
    {
        Debug.WriteLine("Could not find TextBlock");
    }

マウスを使用して TextBlock を選択するなど、他の意図がある場合は、設計時に Visual Studio インターフェイスで見られるような別の手法を使用する必要がある場合があります。

お役に立てれば。

于 2012-10-21T10:39:06.140 に答える