C# WPF Separator を縦↕(垂直)方向に配置
2024-02-06
概要など
-
やりたかった事
Separator
を縦(左右要素の仕切りとして)配置
-
環境 / プロジェクト内容
- Visual Studio Community 2022
- Windows WPF アプリケーション
- C#
- .NET 8.0
xaml での静的配置
stack overflow - How to add a vertical Separator?
上記参考
<StackPanel Orientation="Horizontal">
<StackPanel>
<TextBlock>左側パネル</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"></Separator>
</StackPanel>
<StackPanel>
<TextBlock>右側パネル</TextBlock>
</StackPanel>
</StackPanel>
コメントによると StackPanel
が無くてもいけるとの事
<StackPanel Orientation="Horizontal">
<StackPanel>
<TextBlock>左側パネル</TextBlock>
</StackPanel>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"></Separator>
<StackPanel>
<TextBlock>右側パネル</TextBlock>
</StackPanel>
</StackPanel>
コードビハインドでの動的配置
xaml 上で直接組み込まない場合、先ほどと同性質の Separator
を 以下要領で作れる
Microsoft Learn - コードからリソースにアクセスする
// 縦配置用セパレータ作成
Separator _sepVertical = new Separator();
_sepVertical.Style = (Style)FindResource(System.Windows.Controls.ToolBar.SeparatorStyleKey);
_sepVertical.Width = 1;
// あとは仕切りとして機能させたいタイミングで
// hoge_StackPanel.Children.Add(_sepVertical); とかで適当な手段で動的配置
FindResource だと、見つからなかった場合例外出すけど、
TryFindResource なら null を返すだけなのでそっち使っても良いかも
UIElementCollection.Add(UIElement)
もうちょっと全体意識・長いやつ版
// 引っぱり出せるように x:Name="RootGrid" (適当に命名) を xaml 側へ仕込んでおいてください
Grid _rootGrid = (Grid)FindName("RootGrid");
// ※ 親パネルは横並びにしておく
StackPanel _pParent = new StackPanel() { Orientation = Orientation.Horizontal };
StackPanel _pLeft = new StackPanel();
StackPanel _pRight = new StackPanel();
_pLeft.Children.Add(new TextBlock() { Text = "左側" });
_pRight.Children.Add(new TextBlock() { Text = "右側" });
Separator _sepVertical = new Separator();
_sepVertical.Style = (Style)FindResource(System.Windows.Controls.ToolBar.SeparatorStyleKey);
_sepVertical.Width = 1;
_pParent.Children.Add(_pLeft);
_pParent.Children.Add(_sepVertical);
_pParent.Children.Add(_pRight);
_rootGrid.Children.Add(_pParent);