2011-03-09 2 views
1

읽기 전용 WPF 텍스트 상자에 처음 3자를 한 색으로 표시하고 나머지 7자를 다른 색으로 표시 할 수 있습니까? 저울질로 줄 수있는 가장 좋은 예는 201 103/478입니다.WPF 텍스트 상자에서 다른 색상을 사용하는 방법

고객이 요청한 이유는 주식 번호가 YYYYMM/999 형식이므로 다음과 같습니다. 클라이언트가 YMM/999 형식의 주식 번호를 참조하는 시간의 90 % 요청은 YYY 문자가 연한 회색으로 표시되고 나머지 YMM/999 문자는 표준 검정으로 표시됩니다.

현재 텍스트 상자 컨트롤은 스톡 번호가 클립 보드에 복사되고 컨텍스트 메뉴를 통해 정렬 할 수 있어야하므로 사용됩니다. 다른 컨트롤이 채색을 수행하는 것이 더 적합한 경우 & 정렬 요구 사항을 복사 한 다음 해당 솔루션을 사용할 수 있습니다.

답변

3

는 다음과 같은 대답을 마련하기 위해 올바른 방향으로 날 이끌어 @Vlad.

<TextBlock HorizontalAlignment="Right"> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Sample"/> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
    <Span Foreground="Gray"><Run Text="{controls:Binding Path=StockNumberPrefix}"/></Span><Run Text="{controls:Binding Path=ShortStockNumber}" Margin="0"/> 
</TextBlock> 
+0

내부 'TextBlock'을보다 효율적인'Run'으로 대체 할 수 있습니다. (.NET 4에서는 [Run.Text'] (http://msdn.microsoft.com/en-us/library/system.windows.documents.run.text.aspx)는 종속성 속성이므로 그것을 무언가에 묶어 라.) – Vlad

+0

@Vlad : 나는 Run이보다 효율적이고 이에 따라 코드를 업데이트했음을 당신의 말로 표현할 것이다. –

2

정확히 TextBox이 필요합니까? TextBlock을 사용할 수 있으면 처음 3자를 다른 Span (고유 한 Foreground 브러시를 가질 수 있음)에 넣을 수 있습니다. 이 방법을 사용하면 바인딩을 통해 텍스트를 설정할 수 없습니다.

(이 문제 경우 TextBox처럼 보이도록 TextBlock 스타일을 변경할 수 있습니다.)

+0

내 대답을 제공하는 데 올바른 길을 찾아 주셔서 감사합니다. –

관련 문제