2010-04-02 7 views
1

리본 컨트롤에 텍스트 상자에 문제가있는 것 같습니다. 일반적인 TextBox 컨트롤 동작 : 텍스트가 너비를 초과하면 고정 된 너비와 보이는 캐럿이 예상됩니다. 그러나 RibbonTextBox 컨트롤은 너비를 변경하고 텍스트가 오른쪽 한계를 초과하면 오버플로가 표시되지 않습니다. WPF RibbonTextBox 너비 문제

나는 다음과 같은 무언가를 블로그에 해킹을 발견

var img = SearchButton.Template.FindName("image", SearchButton); 
if (img != null && img is Image) 
    (img as Image).Visibility = Visibility.Collapsed; 
var lbl = FindTemplateControl<Label>(SearchText); 

var border = SearchText.Template.FindName("Bd", SearchText); 

if (border != null && border is Border && img != null && lbl != null) 
{ 
    (border as Border).Width = SearchText.ActualWidth - (((Image)img).ActualWidth + lbl.ActualWidth); 
} 

그러나 나는 reallly 이러한 문제를 해결하고 싶지 않아. 간단한 TextBox 동작을 구현하는 다른 간단한 방법이 있습니까?

답변

1

분명히 RibbonTextBox는 간단한 TextBox가 아닙니다. 그것은 실제로 stackpanel입니다 : image + label + border. 사실, 그 템플릿이 콘텐츠를 가지고 :

<RibbonTextBox> 
    <StackPanel> 
     <Image/> 
     <Label> 
      <Border> 
       <ContentPresenter> 
        <TextBlock/> 
       </ContentPresenter> 
      </Border> 
     </Label> 
     <Border> 
      <ScrollViewer> 
       <Grid> 
        <Rectangle> 
        </Rectangle> 
        <ScrollContentPresenter> 
         <TextBoxView> 
          <DrawingVisual/> 
         </TextBoxView> 
         <AdornerLayer/> 
        </ScrollContentPresenter> 
        <ScrollBar/> 
        <ScrollBar/> 
       </Grid> 
      </ScrollViewer> 
     </Border> 
    </StackPanel> 
</RibbonTextBox> 

을 그래서, 당신은 RibbonTextBox의 폭을 설정할 때, 당신은 실제로 텍스트 상자의 폭을 설정할 수 있지만 전체 컨트롤의 폭을하지 않습니다.

내 제안은 RibbonTextBox에서 파생 된 클래스를 만들고이 클래스에서 게시 된 예제와 마찬가지로 Loaded 이벤트 처리기를 구현하는 것입니다. 하지만 이미지, 레이블 및 테두리에는 추가 여백과 여백이있어 텍스트 상자 왼쪽에 여유 공간이 생깁니다.

1

이 같은 폭을 설정할 수 있습니다

<ribbon:RibbonTextBox Label="abc" TextBoxWidth="300" /> 
10

디자이너에 표시되지 않고, XAML에서 사용할 수있는 속성 'TextBoxWidth "이 RibbonTextBox 문제는 "Enter"키를 누를 때 KeyDown 및 KeyUp 이벤트가 트리거되지 않는다는 것입니다. 결과적으로 "enter"키를 누를 때 LostFocus() 이벤트가 트리거되지 않습니다.

+1

정답입니다. –

-1

:

var textBox = new RibbonTextBox() { Label = "Label", Text = "Text", TextBoxWidth = 150 };