2014-02-15 2 views
5

텍스트 상자에 입력하거나 아무 것도 드래그하지 않으면 (D & D 기능을 사용 중입니다), 텍스트에 대괄호가 자동으로 삽입됩니다. 나는 단지 논리를 넘어서서 또는 논리를 넘어서는 코드에서 그렇게하고 싶지 않습니다. 그게 가능하니?텍스트 상자에 대괄호를 추가하십시오.

예 : AAA을 입력하면 (AAA) 텍스트 상자에 표시됩니다.

+6

당신의 코드는 지금까지 무엇입니까? 바인드 된 속성의 setter에 대괄호를 추가하는 것은 무엇입니까? –

+0

@ KevinBrechbühl- D & D에 대한 이벤트 처리기가있는 단순한 텍스트 상자로 설정자에서 가능하고 간단하지만이를 피하고 싶습니다. – mileyH

+0

XAML은 실제로 논리를 수행하지 않습니다. 왜 코드 작성을 반대합니까? – Paparazzi

답변

3

나는 당신의 조건에

넘어 논리 또는 코드에서 그렇게 싶지 않다 수 없습니다. 뭔가은 변경 이벤트를 캡처하고 대괄호를 텍스트에 추가해야합니다. 그 코드 무언가는 논리 없이는 불가능합니다.

옵션은

  1. 는 TextBlock의의를 SelectionChange 이벤트에 가입하고 괄호를 추가 할 수 있습니다.
  2. # 1 내부에 사용자 정의 컨트롤을 만들면 소비자는 그렇게하지 않아도됩니다. (그것은 기술적 인 측면에서 당신의 질문에 답합니다.)
  3. 대괄호를 컨텍스트로 갖는 두 레이블 사이에 텍스트 블록 컨트롤을 넣습니다. 텍스트 블록의 바운드 데이터가 변경된 시점을보고하는 VM의 부울에 가시성을 바인딩합니다. 텍스트가있는 경우는 표시됩니다. 텍스트가없는 경우는 표시되지 않습니다. 단점은 컨트롤을 종료 할 때만 사용자가을 입력하거나 완전히 변경 될 때까지 이 잡히지 않는다는 것입니다. 여기

자신의 로직 코드의없이 # 3

<Label Content="(" Visibility="{Binding HasText, Converter={StaticResource WindowsVisibilityBooleanConverter}}" /> 
<TextBox Text="{Binding TextInput}" 
      Height="18" 
      HorizontalAlignment="Stretch" /> 
<Label Content=")" Visibility="{Binding HasText, Converter={StaticResource WindowsVisibilityBooleanConverter}}" /> 
2

이다, 나는 이것이 당신이 원하는에 가장 가까운 것입니다 가정합니다.

<TextBox x:Name="tbInput" /> 
<TextBlock Text="{Binding ElementName='tbInput', Path=Text, StringFormat={}({0})}" /> 

단점은 TextBox가 비어있는 경우 당신은 항상 빈 괄호를 ()를 볼 수 있다는 것입니다.

0

은 참조 : String format using MultiBinding?

<StackPanel> 
    <Slider x:Name="sl1" Minimum="10" Maximum="100"/> 
    <Slider x:Name="sl2" Minimum="10" Maximum="100"/> 
    <Label x:Name="label13" Background="Yellow" Foreground="Black"> 
    <Label.Content> 
     <TextBlock> 
      <TextBlock.Text> 
      <MultiBinding StringFormat="{}{0} x {1} Test"> 
       <Binding ElementName="sl1" Path="Value" /> 
       <Binding ElementName="sl2" Path="Value" /> 
      </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </Label.Content> 
    </Label> 
</StackPanel> 
관련 문제