1

在我看来,功能区控件的文本框有问题。我期待一个常见的 TextBox 控件行为:当文本超过宽度时,固定宽度和可见插入符号。但是 RibbonTextBox 控件改变了它的宽度,当文本超过右限制时,溢出是不可见的。

我在一个博客上发现了一个 hack,它做这样的事情:

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

4 回答 4

11

有一个属性“TextBoxWidth”未在设计器中显示,但也可以在 XAML 中使用:

<ribbon:RibbonTextBox Label="abc" TextBoxWidth="300" />
于 2011-09-02T15:12:25.037 回答
1

显然,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 事件处理程序,就像您在帖子中给出的示例一样。但请记住,图像、标签和边框有额外的边距和填充,这将为您在文本框的左侧提供额外的空间。

于 2010-04-08T20:30:21.340 回答
1

您可以像这样设置宽度:

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

于 2010-10-23T12:27:57.380 回答
-1

RibbonTextBox 的问题是当您按下“enter”键时不会触发 KeyDown 和 KeyUp 事件。因此,LostFocus()当您按下“回车”键时,不会触发该事件。

于 2012-06-28T21:01:41.303 回答