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でLastChildFillをfalseに設定するだけです。
次に、DockPanelに追加する前に、添付のDockプロパティをBottomに追加する各ボタンに設定します。
例:
var button = new Button();
DockPanel.SetDock(button, Dock.Bottom);
この問題を解決する最良の方法は、スタックパネルから派生したカスタムコンテナーを実装することですが、実行時に要素が追加された場合、迅速でダーティなソリューションは次のとおりです。
public Window1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Content = "Button " + i;
MyStack.Children.Insert(0, btn);
}
}
追加するのではなく、0の位置に項目を挿入するだけです。
StackPanelを別のコンテナー(StackPanelではなく、おそらくDockPanel)内に配置して、下揃えにします。次に、ボタンを設定するときに、新しいボタンをそれぞれ最初の位置に配置します。
Column = 1でUniformGridを使用すると、スタックが適切に表示されるか、Rows = 1を設定すると水平方向に適切にスタックが表示されることがわかりました。そして、インデックス0から追加すると、ボトムアップで機能します。
Nirによる変換ソリューションが大好きです。変換を使用して実行できるかどうか疑問に思っていました。
ただし、1つの注意点があります。ListBoxなどのScrollViewベースのコントロールで変換トリックを使用しないでください。スクロールバーの操作がコンテンツと逆になるためです。あなたがエンドユーザーでない限り、見るのはおかしい。 ;>