かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

WPF:ボタンのテキストで改行させる

WPFにて、ボタンのテキストを改行して表示させる場合、TextBlock を入れ子にする方法があります。
xaml側、cs側の、どちらでも対応可能です。

(実行例)

f:id:kakisoft:20180402221750p:plain

(記述例)

xaml

<Window x:Class="PracticeWPF.MyWindow10"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PracticeWPF"
        mc:Ignorable="d"
        Title="MyWindow10" Height="450" Width="800">
    <Grid>
        <!--
        ==========< ボタン内で改行を入れる >==========
        -->
        <StackPanel Width="500" Orientation="Horizontal"  HorizontalAlignment="Left" VerticalAlignment="Top" >
            <!-- xaml側で実現  -->
            <Button>
                <TextBlock x:Name="InnerTextBlock01" TextWrapping="Wrap" Text="ButtonにTextBlockを入れ子にできるよ。" Width="80" />
            </Button>

            <!-- cs側で実現(csソース参照)  -->
            <Button x:Name="Button02"  Content="" Width="80"/>
        </StackPanel>

    </Grid>
</Window>

cs側

using System.Windows;
using System.Windows.Controls;

namespace PracticeWPF
{
    /// <summary>
    /// MyWindow10.xaml の相互作用ロジック
    /// </summary>
    public partial class MyWindow10 : Window
    {
        public MyWindow10()
        {
            InitializeComponent();


            //==========< ボタン内で改行を入れる >==========
            //(コード側で設定)
            var b = new TextBlock();
            b.Text = "TexoBlockのTextWrappingを使うと改行が楽だよ。";
            b.TextWrapping = TextWrapping.Wrap;
            Button02.Content = b;
        }
    }
}