0

私は自分のユーザーインターフェイスを整理する方法を理解するために何時間も費やしてきましたが、PHP / CSSの単純なことは、C#に夢中になっています。

基本的に、電子メールの返信を表示するための2x2 TablePanelLayoutであるReplyというクラスを作成しています。各応答はこのインスタンスになり、垂直方向のリストに表示されます。このレイアウトを作成する方法を理解しようとしていますが、中央に配置し、親コンテナが引き伸ばされたときにサイズを変更します。

私の最後の試みは2つのTablePanelLayoutsを使用しました。1つは3x3グリッドで、コンテンツに中央のセルを使用し、残りはエッジ間に間隔を作成することでしたが、この方法では中央のコンテンツ領域をスクロールできないことに気付きました。だから私の質問は...これを行うための最良の方法は何ですか?

コンテンツには垂直のFlowLayoutPanelが最適だと思いますが、親のサイズが変更されたときにコンテンツ領域を拡大できるようにしながら、コンテンツ領域を中央に維持する方法についてはわかりません。

編集

それがもっと明確になれば、私はその考えは...

<OutsideLayout>
     <RepliesContainer>
          <Reply></Reply>
          <Reply></Reply>
          <Reply></Reply>
     </RepliesContainer>
<OutsideLayout>

「RepliesContainer」がVerticalFlowLayoutPanelである場合、「Reply」は各応答のTableLayoutPanelであり、「OutsideContainer」は中央に保持しながら内部コンテンツをスクロールできるようにするために必要なものです。「OutsideContainer」が必要かどうかはわかりませんが、DockStyle.Fillの使用方法がわかりません。それ以外の場合は、エッジ間の間隔を維持します。

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

4

1 に答える 1

1

スペースを維持する最も簡単な方法は、RepliesContainerに等しい値の左右のマージンを追加することです。次に、Horizo​​ntalAlignmentをStretchに設定します(これはすでにデフォルトになっているはずです)。

次に、RepliesContainerに、必要なすべての返信を一覧表示させます。これにより、リストが表示領域よりも高くなる可能性があります(次の手順で解決されます)

最後に、OutsideLayoutを単にScrollViewerにします。

もちろん、そもそもこのようにアプローチすることはしません。私は個人的に、スクロールバーと垂直パネルを処理し、個々の2x2応答をレイアウトする単純なItemsControlを使用します。このようなもの(疑似コードであるため、コンパイルされない場合があります。ただし、アイデアは得られます)。

<ItemsControl x:Name="MyRepliesControl"
    DataSource="{Binding MyRepliesData}">

    <!-- This is the template for an individual reply.
         The ItemsControl will create one instance for each reply automatically. -->
    <ItemsControl.ItemTemplate>

        <!-- 2x2 Reply Grid with a 24-unit margin on the left and right -->
        <Grid Margin="24,0" ...>
            ... contents of grid cells, etc. ...
        </Grid>

    </ItemsControl.ItemTemplate>

</ItemsControl>

注:これにより、左右の余白がスクロールバー領域の内側に配置されます。スクロールバーの外側にマージンが必要な場合は、代わりに、ItemsControl自体にMargin属性を配置します。

次に、DataContextを設定し、MyRepliesDataというIEnumerableプロパティがあり、個々の応答があることを確認します。

これはそれを行うための適切な方法です。このアプローチでは、データの動作の「テンプレート」にのみ焦点を当てることで、視覚的に必要なものをすべてカスタマイズできます。ItemsControlは、すべてをレイアウトしてスクロールバーを表示することを心配しています。あなたの唯一の責任は、MyRepliesDataを介してデータを提供することです。

于 2013-03-24T08:43:55.580 に答える