WPFグリッドとStackpanel
-
19-08-2019 - |
質問
WPF / Silverlightレイアウトの場合、多くの行と列、または大量のStackpanelを備えたグリッドを使用する方が良いですか?
解決
水平および垂直に整列させる必要がある場合は、グリッドを使用する必要があります。 StackPanelを使用して、物事の行または列を作成します。それらの物事が他のものと整列する必要がない場合。
ただし、これらの2つのオプションに限定しないでください。特に、DockPanelをご覧ください。 StackPanelよりもやや複雑ですが、マークアップはグリッドほど雑然としていません。 DockPanelに関する優れた記事を次に示します。
他のヒント
使用するコンテナは、あるアプローチが別のアプローチより優れているかどうかではなく、コンテンツに基づいている必要があります。水平と垂直の両方に整列させる必要がある場合は、グリッドを使用する必要があります。ただし、それ以外は、表示するコンテンツによって異なります。
グリッドはより良いアイデアだと思います。通常、グリッドを使用して一般的なレイアウトを設定し、いくつかのスタックパネルをあちこちで使用して、特定の処理を行います。また、グリッドを使用するとパフォーマンスが向上し、一般にグリッドの方が柔軟性が高くなると感じています。
グリッドは良いアイデアだとは思いません。
たとえば、既存のグリッドレイアウトドキュメントに行を挿入する場合(中央)
既存の行は1,2,3,4であり、要件は1〜2の間に新しい行を挿入することです
その後、2,3,4から3,4,5に変更する必要がありました(すべてのタグに変更があります...)
1行に3〜5列があるかどうかを考えてみてください...すべてのデジタルを並べ替えるのは面倒です。!!!
新しい要素、行、または列を挿入するときに変更を行う方が簡単だと思うので、StackPanelが好きです。グリッドを使用すると、行番号と列番号を読んで現在地を確認する必要があります。 StackPanelを使用すると、ネスティングに従うだけです。これは、グリッドよりも簡単で面倒です。
たとえば、XAMLページでは、親グリッドのような水平スタックパネルを使用し、列が必要な場合は、別の<!> quot; vertical <!> quot;を使用します。ネストされたスタックパネル。このようにして、水平スタックパネルは<!> quot; grid <!> quot;になります。ネストされた垂直StackPanelが列になります。グリッド内の行と列を読みやすく、変更しやすいと思います。
両方に強度があります(Grid / Stackpanel)。 グリッドの問題は、ラインの再構築です。 Stackpanelの問題は、テーブル構造がないことです(固定列幅)。 だから私はそれがこの問題についての良い解決策だと思う:-)
定義スタイル
<Page.Resources>
<Style x:Key="LabelCol1" TargetType="Label">
<Setter Property="Width" Value="200" />
</Style>
<Style x:Key="EditCol2" TargetType="TextBox">
<Setter Property="Width" Value="250" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="Margin" Value="3" />
</Style>
<Style x:Key="ButtonCol3" TargetType="Button">
<Setter Property="Width" Value="120" />
<Setter Property="Margin" Value="3" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</Page.Resources>
そしてスタイルをStackpanelに使用
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Style="{StaticResource LabelCol1}" Content="Solution path" />
<TextBox Style="{StaticResource EditCol2}" />
<Button Style="{StaticResource ButtonCol3}" Content="Open..." />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Style="{StaticResource LabelCol1}" Content="Solution name" />
<TextBox Style="{StaticResource EditCol2}" />
</StackPanel>
</StackPanel>
このようなレイアウトの経験はありませんが、多くのネストされたスタックパネルと比較してグリッドのレンダリングが簡単であることに間違いはありません。