WPF RibbonTextBox Проблема ширины - PullRequest
1 голос
/ 02 апреля 2010

Мне кажется, что в элементе управления ленты есть проблема с текстовыми полями. Я ожидал обычного поведения элемента управления TextBox: фиксированная ширина и видимая каретка, когда текст превышает ширину. Но элемент управления 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);
}

но я действительно не хочу делать такой обходной путь. Есть ли какой-нибудь другой более простой способ добиться простого поведения TextBox?

Ответы [ 4 ]

10 голосов
/ 02 сентября 2011

Существует свойство "TextBoxWidth", которое не отображается в конструкторе, но может использоваться и в XAML:

<ribbon:RibbonTextBox Label="abc" TextBoxWidth="300" />
1 голос
/ 23 октября 2010

Вы можете установить ширину следующим образом:

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

1 голос
/ 09 апреля 2010

Очевидно, RibbonTextBox не является простым TextBox; на самом деле это стековая панель с: изображение + метка + граница. Собственно, его шаблон имеет такой контент:

<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, как в примере, который вы приводили в своем посте. Но имейте в виду, что изображение, метка и рамка имеют дополнительное поле и отступы, что даст вам дополнительное пространство слева от текстового поля.

0 голосов
/ 29 июня 2012

Проблема с RibbonTextBox заключается в том, что события KeyDown и KeyUp не запускаются при нажатии клавиши «Ввод». В результате событие LostFocus() не вызывается при нажатии клавиши «Ввод».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...