TextBlock内のテキストに垂直方向の中央揃えを割り当てるにはどうすればよいですか?私はTextAlignmentプロパティを見つけましたが、それは水平方向のテキストの配置です。縦書きのテキスト整列のためにはどうすればよいですか?WPF TextBlockでのテキストの垂直方向の整列
答えて
AのTextBlock自体は、垂直配向性に
私が見つけたこと、これは境界線の内側にテキストブロックを置くことで行うための最善の方法なので、国境を行うことはできませんあなたのための調整を行います。
<Border BorderBrush="{x:Null}" Height="50">
<TextBlock TextWrapping="Wrap" Text="Some Text" VerticalAlignment="Center"/>
</Border>
注:これは、グリッドを使用して機能的に同等である、それだけでVerticalAlignment="Center"
、あなたはどの1つが私にとってより適切な
+1垂直方向の配置を有効にするには、境界線の高さを設定する必要があります。 –
また、TextBlockの高さを指定することはできません。 – pearcewg
@gav - TextAlignmentは水平方向の配置のみを行います...質問は垂直方向の配置についてです –
TextBlockは、垂直方向のテキストの配置をサポートしていません。
グリッドでテキストブロックを折り返し、HorizontalAlignment = "Stretch"とVerticalAlignment = "Center"に設定することで、この問題を回避します。このよう
:
<Grid>
<TextBlock
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Text="Your text" />
</Grid>
+1ボーダーベースのアプローチのように、グリッドの高さを設定する必要はありません。 –
私はこのアプローチが私にとって最も効果的であることを発見しました。 'Grid'の中の' Ellipse'に 'TextBlock'をオーバーレイすることで、動的インジケータライトを作成しています。幅と高さのプロパティをバインドする必要はありません。 – paddy
あるとしてコントロールがレイアウトの残りの部分で収まるようにしたいどのように依存しますこの問題を修正しました。
これは、TextBlock
がグリッドでラップされているためですが、実際にはwpfのすべてがそのためです。
Orion Edwards Answerはどのような状況でも機能しますが、これを行うたびに境界線を追加して境界線のプロパティを設定するのは苦労かもしれません。もう1つの簡単な方法は、テキストブロックのパディングを設定することです。
私のブログの投稿を見ることができます。コードビハインドからTextBlockのカスタム高さを設定できます。カスタム高さを設定するために、あなたは国境で内側にそれを設定するか、またはあなたがテキストブロックの代わりにラベルを使用することができます
http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html
をStackPanelのする必要があります。
<Label Content="Hello, World!">
<Label.LayoutTransform>
<RotateTransform Angle="270"/>
</Label.LayoutTransform>
</Label>
ニース、ラベルには、VerticalContentAlignmentがあります。 Greeeat。 +1 –
OPがTextBlockを使用する必要がある場合、またはラベルを取得できない場合は明確ではありません。私が必要としたもののためにラベルを使用しました。 +1 –
これは、垂直方向の配置を適用する方法ではなく、垂直方向のテキストを生成する方法の質問に答えます。 –
私は、テキストボックスのスタイル(すなわち:controltemplate
)を変更することがわかってきましたし、その後、センターにPART_ContentHost
垂直方向の配置を変更すると、ちょうどくすくす笑いのためのトリックに
OPが尋ねていますTextBlocksについて彼らはControlTemplatesを持っていません。 – ANeves
を行い、このXAMLに旋回を与えるだろう。それは完璧ではないので、「整列」ではなく、段落内のテキストの整列を調整することができます。
<TextBlock>
<TextBlock BaselineOffset="30">One</TextBlock>
<TextBlock BaselineOffset="20">Two</TextBlock>
<Run>Three</Run>
<Run BaselineAlignment="Subscript">Four</Run>
</TextBlock>
はあなたのTextBlockの高さを見落とすことができた場合は、これを使用するために、それは良いでしょう。私の場合は
<TextBlock Height="{Binding}" Text="Your text"
TextWrapping="Wrap" VerticalAlignment="Center" Width="28"/>
を、私はTextBlock
表示が立派にするためにこれをしませんでした。
<Border BorderThickness="3" BorderBrush="Yellow" CornerRadius="10" Padding="2"
HorizontalAlignment="Center" VerticalAlignment="Center" Height="30" Width="150">
<TextBlock FontSize="20" Height="23" HorizontalAlignment="Left" Margin="0,0,0,-5" Text="" VerticalAlignment="Top" Width="141" Background="White" />
</Border>
下からテキストをさらに行うためのトリックは、私は私はそれが少し異なるしなければならなかった見つけ
Margin="0,0,0,-5"
を設定することです。私の問題は、フォントサイズを変更した場合、テキストはTextBox内の残りのTextBoxと一緒に一番下にとどまるのではなく、TextBox内で上に移動するということでした。頂点の配置を上から下に変更することで、フォントをプログラムでサイズ20からサイズ14 &に戻し、テキストの重力を下に保ち、物事をきちんと保つことができました。ここに方法は次のとおりです。@Orionエドワーズが提供する答えに展開する
、これは(ないスタイルが設定されていない)あなたは、コードビハインドから完全に行うだろう方法です。基本的に、ChildをTextBoxに設定したBorderから継承するカスタムクラスを作成します。以下の例では、1行だけを必要とし、境界線はCanvasの子であると想定しています。また、Borderの幅に基づいてTextBoxのMaxLengthプロパティを調整する必要があると仮定します。下の例では、テキストボックスを「IBeam」タイプに設定することで、テキストボックスを模倣するように境界線のカーソルを設定しています。 TextBoxが境界線の左側に完全に位置合わせされないように、「3」の余白が設定されます。
double __dX = 20;
double __dY = 180;
double __dW = 500;
double __dH = 40;
int __iMaxLen = 100;
this.m_Z3r0_TextBox_Description = new CZ3r0_TextBox(__dX, __dY, __dW, __dH, __iMaxLen, TextAlignment.Left);
this.Children.Add(this.m_Z3r0_TextBox_Description);
クラス:私はラベルにラベル(またはのTextBlock)を使用する方が良いと思い
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
namespace ifn0tz3r0Exp
{
class CZ3r0_TextBox : Border
{
private TextBox m_TextBox;
private SolidColorBrush m_Brush_Green = new SolidColorBrush(Colors.MediumSpringGreen);
private SolidColorBrush m_Brush_Black = new SolidColorBrush(Colors.Black);
private SolidColorBrush m_Brush_Transparent = new SolidColorBrush(Colors.Transparent);
public CZ3r0_TextBox(double _dX, double _dY, double _dW, double _dH, int _iMaxLen, TextAlignment _Align)
{
/////////////////////////////////////////////////////////////
//TEXTBOX
this.m_TextBox = new TextBox();
this.m_TextBox.Text = "This is a vertically centered one-line textbox embedded in a border...";
Canvas.SetLeft(this, _dX);
Canvas.SetTop(this, _dY);
this.m_TextBox.FontFamily = new FontFamily("Consolas");
this.m_TextBox.FontSize = 11;
this.m_TextBox.Background = this.m_Brush_Black;
this.m_TextBox.Foreground = this.m_Brush_Green;
this.m_TextBox.BorderBrush = this.m_Brush_Transparent;
this.m_TextBox.BorderThickness = new Thickness(0.0);
this.m_TextBox.Width = _dW;
this.m_TextBox.MaxLength = _iMaxLen;
this.m_TextBox.TextAlignment = _Align;
this.m_TextBox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
this.m_TextBox.FocusVisualStyle = null;
this.m_TextBox.Margin = new Thickness(3.0);
this.m_TextBox.CaretBrush = this.m_Brush_Green;
this.m_TextBox.SelectionBrush = this.m_Brush_Green;
this.m_TextBox.SelectionOpacity = 0.3;
this.m_TextBox.GotFocus += this.CZ3r0_TextBox_GotFocus;
this.m_TextBox.LostFocus += this.CZ3r0_TextBox_LostFocus;
/////////////////////////////////////////////////////////////
//BORDER
this.BorderBrush = this.m_Brush_Transparent;
this.BorderThickness = new Thickness(1.0);
this.Background = this.m_Brush_Black;
this.Height = _dH;
this.Child = this.m_TextBox;
this.FocusVisualStyle = null;
this.MouseDown += this.CZ3r0_TextBox_MouseDown;
this.Cursor = Cursors.IBeam;
/////////////////////////////////////////////////////////////
}
private void CZ3r0_TextBox_MouseDown(object _Sender, MouseEventArgs e)
{
this.m_TextBox.Focus();
}
private void CZ3r0_TextBox_GotFocus(object _Sender, RoutedEventArgs e)
{
this.BorderBrush = this.m_Brush_Green;
}
private void CZ3r0_TextBox_LostFocus(object _Sender, RoutedEventArgs e)
{
this.BorderBrush = this.m_Brush_Transparent;
}
}
}
、あなたは最終的にそれが装着され、国境管理で直接マウスイベントをアタッチすることはできませんTextBlock内の、これは私のrecomendationです:
<Label
Height="32"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Stretch"
MouseLeftButtonUp="MenuItem_MouseLeftButtonUp">
<TextBlock Padding="32 0 10 0">
Label with click event
</TextBlock>
</Label>
あなたがtext wrappingなしで行うことができる場合、私はラベルとのTextBlockを交換し、これを行うための最も簡潔な方法だと思います。そうでない場合は、他の有効な回答の1つに従ってください。
<Label Content="Some Text" VerticalAlignment="Center"/>
<TextBox AcceptsReturn="True"
TextWrapping="Wrap"
VerticalContentAlignment="Top" >
</TextBox>
質問は 'TextBox'ではなく' TextBlock'についての質問でした。 -1 – KnorxThieus
TextBlock
そのコンテンツの垂直方向の配置をサポートしていません。 TextBlock
を使用する必要がある場合は、それをその親に関して揃えなければなりません。
しかしあなたの代わりにLabel
を使用することができます(と彼らは非常によく似た機能を持っている)場合は、あなたでき位置テキストの内容:
<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
I am centred text!
</Label>
Label
を意味し、デフォルトではその境界を埋めるためにストレッチしますラベルのテキストは中央に配置されます。
- 1. WPF DataGridテキストの垂直方向の整列
- 2. テキスト内で垂直方向に整列
- 3. モバイルデバイスでの垂直方向の整列
- 4. テキストDIVでの垂直方向の整列
- 5. テキストボックスの垂直方向の整列
- 6. CSSの垂直方向の整列
- 7. ブートストラップ4の垂直方向の整列
- 8. マテリアライズの垂直方向の整列
- 9. キャンバステキストの垂直方向の整列
- 10. Migradoc - テーブルの垂直方向の整列
- 11. ShareThisアイコンの垂直方向の整列
- 12. div内のテキストの正確な垂直方向の整列
- 13. CSSの垂直方向のテキストの整列
- 14. CSSヘッダーの垂直方向のテキストの整列
- 15. テーブルセルのテキストの垂直方向の整列
- 16. テーブルセルのテキストの垂直方向の整列
- 17. テーブルの分割画像とテキストの垂直方向の整列
- 18. テキストと進行状況バーの垂直方向の整列
- 19. 画像とテキストとの垂直方向の整列
- 20. 画像とテキストの垂直方向の整列
- 21. 垂直方向の整列CSSを使用してテキストを垂直に整列する
- 22. Firefoxでの入力内のテキストの垂直方向の整列 - Windowsのみ
- 23. 高さの100%までのページの垂直方向の整列
- 24. ブートストラップ。単一の列の垂直方向の整列
- 25. スクロールテーブルのthead内での垂直方向の整列tbody
- 26. 100%の高さでdivの垂直方向の整列img
- 27. WPFでの水平方向から垂直方向のWrapPanel
- 28. 選択ボックスのテキストの垂直方向の整列 - Firefoxの問題
- 29. DIVタグでの垂直方向の整列
- 30. Python-docx、セル内での垂直方向の整列
@shrと他のもの: 'TextAlignment'は、(垂直方向の)整列ではなく、水平整列にのみ影響することに注意してください。 –