WPF StackPanel を下から上に垂直に埋めるにはどうすればよいでしょうか?
-
20-08-2019 - |
質問
を埋めることができる必要があります stackpanel
と buttons
しかしボタンは 最初にスタックパネルの一番下に表示され、上に向かって入力される必要があります. 。ボタンは動的に作成され、その数は未知数であるため、視覚的なハッキングは機能しません。垂直方向の配置を試してみましたが、役に立ちませんでした。
解決
これと同様ます:
<StackPanel VerticalAlignment="Bottom">
...
</StackPanel>
と上向きのボタンを移入するには、代わりにそれらを追加するので、位置0にあるボタンを挿入する必要があります。
他のヒント
それとも、下から上へスタックするボタンを取得するのStackPanel 180度回転し、再びそれらに右サイドアップを取得するには、ボタンに別の180度回転することができます:
<StackPanel>
<!-- rotate all buttons inside this panel -->
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="180"/>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!-- rotate the stack panel -->
<StackPanel.LayoutTransform>
<RotateTransform Angle="180"/>
</StackPanel.LayoutTransform>
<!-- content -->
<Button>1</Button>
<Button>2</Button>
</StackPanel>
別の代替ではなくDockPanelを使用することです。
ちょうどDockPanelにfalseにLastChildFillを設定します。
は、次にDockPanelに追加する前に、あなたが下に追加されている各ボタンに付属のDockプロパティを設定します。
例:
var button = new Button();
DockPanel.SetDock(button, Dock.Bottom);
問題を解決する最良の方法は、StackPanelの由来カスタムコンテナを実装することです しかし要素は、実行時に追加された場合に迅速かつ汚いソリューションです。
public Window1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Content = "Button " + i;
MyStack.Children.Insert(0, btn);
}
}
ちょうどそれらを追加するのではなく、0の位置に項目を挿入します。
他の容器(多分DockPanelないのStackPanel)の内側のStackPanelを入れてみてください。あなたは、ボタンを読み込むときに、最初の位置にそれぞれ新しいものを置きます。
Column=1 で UniformGrid を使用すると、きれいに塗りつぶされたスタックが得られ、Rows=1 に設定すると、きれいに水平方向に塗りつぶされたスタックが得られることがわかりました。インデックス 0 から追加すると、ボトムアップで動作します。
ニールによって変換ソリューションを愛し。それがトランスフォームを使用して行うことができれば、私は思っていた。
しかし1つの警告:スクロールバーの操作は、コンテンツから反転しますので、このようなリストボックスなどScrollViewベースの制御に変換トリックを使用しないでください。限り、あなたは、エンドユーザーじゃないと、見て陽気。 ;>