プロフィール

髭山髭人(ひげひと)

自分の書いた記事が、一人でも誰かの役に立てば...
活動信条の一つとして「貴方のメモは、誰かのヒント」というのがあります。

このサイトについて

本家HP packetroom.net から切り離した いわゆる技術メモ用のブログで、無料レンタルサーバーにて運用しています。広告表示はその義務なのでご容赦。
XREA さんには長年お世話になっています

C# WPF Separator を縦↕(垂直)方向に配置

概要など

  • やりたかった事

    • 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);