C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで[ToolTipService]で表示させる[ToolTip]コントロールに長文テキストを表示させた場合に折り返しをさせない方法です。
[ToolTip]には折り返し設定が無い
例えば、こんな感じで[AutoSuggestBox]コントロールのリストに[ToolTipService]を追加します。
<StackPanel Orientation="Vertical">
<AutoSuggestBox Name="autosuggestboxTest" PlaceholderText="検索" QueryIcon="Find" ItemsSource="{Binding suggestItems}">
<AutoSuggestBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" ToolTipService.ToolTip="{Binding Path=Name}"/>
</DataTemplate>
</AutoSuggestBox.ItemTemplate>
</AutoSuggestBox>
</StackPanel>
長い文字列を追加するように実行すると、こんな感じでツールチップが表示されます。
[TextBlock]コントロールには[TextWrapping]プロパティで文字の折り返し設定が可能です。
しかし[ToolTip]コントロールには、文字の折り返しを行うための[TextWrapping]プロパティや代替えのプロパティが無いので、そのままでは文字列の折り返しができません。
なので[Content]プロパティに、新しく[TextBlock]コントロールを追加して文字の折り返しが可能です。
先ほどのXamlを修正します。
<AutoSuggestBox Name="autosuggestboxTest" PlaceholderText="検索" QueryIcon="Find" ItemsSource="{Binding suggestItems}">
<AutoSuggestBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}">
<ToolTipService.ToolTip>
<ToolTip MaxWidth="640">
<TextBlock Text="{Binding Path=Name}" TextWrapping="NoWrap"/>
</ToolTip>
</ToolTipService.ToolTip>
</TextBlock>
</DataTemplate>
</AutoSuggestBox.ItemTemplate>
</AutoSuggestBox>
[TextBlock]側の文字の折り返し[TextWrapping]プロパティを変更しても[ToolTip]コントロールの[Width]プロパティで文字が折り返されてしまう場合があるので、[MaxWidth]プロパティを追加します。
実行すると、こんな感じで長いテキストでもツールチップが1行で表示されます。
まとめ
今回は、WinUI3プロジェクトで[ToolTipService]で表示させる[ToolTip]コントロールに長文テキストを表示させた場合に折り返しをさせない方法について紹介しました。
[TextBlock]コントロールの[TextWrapping]プロパティのような文字の折り返しを制御するプロパティが[ToolTip]コントロールにはありません。
そのため[ToolTip]の表示部分([Content]プロパティ)に[TextBlock]を新しく追加して[TextWrapping]プロパティを変更して表示文字の折り返しを制御が可能です。
WinUI 3で表示されるツールチップに表示される文字の折り返しを制御したい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。