2011-04-30 2 views
11

WPF TextBox에서 문자 사이의 간격을 수정하고 싶습니다.
CSS에서 사용할 수있는 것은 letter-spacing: 5px과 같습니다.
XAML에서 가능하다고 생각합니다. 가장 간단한 방법은 무엇입니까?WPF TextBox에서 문자 간격이나 자간을 어떻게 지정합니까?

"Introduction to the GlyphRun Object and Glyphs Element"문서를 발견했으며 매우 도움이되지 않는 것으로 나타났습니다.

<!-- "Hello World!" with explicit character widths for proportional font --> 
<Glyphs 
    FontUri    = "C:\WINDOWS\Fonts\ARIAL.TTF" 
    FontRenderingEmSize = "36" 
    UnicodeString  = "Hello World!" 
    Indices    = ",80;,80;,80;,80;,80;,80;,80;,80;,80;,80;,80" 
    Fill    = "Maroon" 
    OriginX    = "50" 
    OriginY    = "225" 
/> 

같은 문서 페이지는 Indices 속성이 무엇이 "설명"제공 :

해당 페이지에서 코드 예제

enter image description here

나는 아무 생각이 무엇 그게 전부입니다. 나는 또한 색인이 옳은지 확신하지 못한다. 코드의 주석은 내가 신경 쓰지 않는 "글자 폭"을 말한다. 사이의 너비를 사이로 조정하고 싶습니다.

또한 TextBox에 Glyphs 요소를 적용하는 방법에 대한 예제가 없습니다. 내가 그것을 시도했을 때, 내 WPF 테스트 애플 리케이션이 추락했습니다.


내가 원하는 것은 WPF TextBox 내의 그려진 문자 사이에 나타나는 빈 공간을 약간 늘리는 것입니다. 텍스트의 길이와 내용은 다양합니다. 새 문자가있을 때마다 Indicies 속성을 수정해야합니까? "모든 캐릭터에 대해 평소보다 20 % 더 많은 공간을 확보하십시오"라고 말할 수있는 방법이 있습니까?

아무도 도와 줄 수 있습니까?

답변

14

나는 Glyphs와 FontStretch를 시도했기 때문에 나는 찾고 있던 결과를 쉽게 얻을 수 없었다. 나는 내 목적에 부합하는 접근 방식을 고를 수 있었다. 어쩌면 다른 사람들에게도 도움이 될 것입니다.

<ItemsControl ItemsSource="{Binding SomeString}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" 
         Margin="0,0,5,0"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

임의의 문자열에 바인딩 할 수 있으며 간격을 올바르게 설정하기 위해 문자 너비를 감지 할 필요가 없습니다. 오른쪽 여백은 사이이며 문자는입니다.

예 : 어떤 그 가치에 대한

Kerning

+0

이것은 좋은 해결책입니다. 우리는이 솔루션을 일부 장소에서 사용하지만 몇백 개의 항목이있는'ItemsControl'에서 사용하고 싶었고 렌더링 시간에 여러 초를 추가했습니다. 우리는 그 시나리오에서 일반적인'TextBlock'으로 돌아갔습니다. 그러니주의 깊게/조심하세요! –

+0

이렇게하면 텍스트를 자르거나 감쌀 수 없게됩니다. – Walkor

0

FontStretch 옵션이 있습니까?

그렇지 않으면 this을보고 싶은데, 어떤 사전 폭이 의미하는지 보여주는 이미지가 있습니다. 비록 내가 이것을 이전에하지 않았지만 이것이 작동하는지를 알지 못한다면 좌우 베어링이 당신이 원하는 것일 수 있습니다!

-1

. . .

RichTextBox로 구현을 전환 할 수있는 옵션이있는 경우이 방법은 2013 년 9 월에 발견 된 해결 방법보다 쉽습니다. 필자 만의 필요에 따라 시도해 보았지만 필요한 경우 작동합니다. RichTextBox를 사용하여 식자와 같은 개별 공백 커닝을 제어하는 ​​방법이 없습니다. 그러나 TextBox는 HTML과 같은 추가 공간 (단일 공간에 여러 개의 인접한 공간 통합)을 먹고있었습니다.공백이 내 텍스트 문자열에있는 것과 동일한 양의 공백을 표시해야하고 RichTextBox가이 작업을 수행해야합니다.

<RichTextBox x:Name="MyRichTextBox"></RichTextBox> 

저는 전문가는 아니지만 XAML에서 텍스트 콘텐츠를 지정할 수없는 것으로 보입니다. 코드 숨김 이벤트에서 지정해야했습니다.