带有长字符的文本框,例如URL

时间:2014-01-20 12:12:47

标签: c# wpf xaml

我的文本框里面有URL,当你把URL(长)放入其中时,我希望它向下移动一行以查看URL的最后一个字符。
我怎么能实现它 改变宽度大小?

2 个答案:

答案 0 :(得分:1)

TextBlock类具有TextBlock.TextTrimming Property功能,使用户可以在文本末尾添加省略号(...),该省略号太长而无法在TextBlock中显示。如果您的TextBox 用于文本输入,那么您只需使用TextBlock控件即可。

如果你真的需要使用TextBox,那么遗憾的是它没有这样的属性。一种替代方法是使用具有此属性的自定义TextBox。您可以在CodeProject的WPF TextBox With Ellipsis页面中找到相关示例。


更新>>>

由于你没有显示任何代码,没有人能告诉你你做错了什么。无论哪种方式,这是一个简单的问题我确定你可以自己修复。将其添加到其他地方的其他视图中:

<TextBlock Text="123456789012345678901234567890123456789012345678901234567890" 
    Width="100" TextTrimming="WordEllipsis" />

现在您应该可以在TextBlock的末尾看到省略号。这是多么简单。如果您的示例不起作用,则通过添加其他内容使其无效。

答案 1 :(得分:1)

当焦点丢失时,尝试将文本框滚动到文本的开头(不确定如何使用数据绑定):

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    (sender as TextBox).ScrollToHome();
}

您还可以创建行为以避免直接事件处理:

添加对System.Windows.Interactivity的引用(与Expression Blend一起安装)。

添加行为类:

using System.Windows.Controls;
using System.Windows.Interactivity;

namespace WpfApplication2
{
    public class AutoScrollToHomeBehavior : Behavior<TextBox>
    {
        protected override void OnAttached()
        {
            AssociatedObject.LostFocus += (tb, args) =>
                {
                    (tb as TextBox).ScrollToHome();
                };
        }
    }
}

将行为附加到文本框:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:e="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Vertical">
            <TextBox HorizontalAlignment="Left" Height="23"  Width="120">
                <e:Interaction.Behaviors>
                    <local:AutoScrollToHomeBehavior />
                </e:Interaction.Behaviors>
            </TextBox>
            <TextBox HorizontalAlignment="Left" Height="23"  Width="120">
                <e:Interaction.Behaviors>
                    <local:AutoScrollToHomeBehavior />
                </e:Interaction.Behaviors>
            </TextBox>
        </StackPanel>
    </Grid>
</Window>