C# 具有长字符(如URL)的文本框

C# 具有长字符(如URL)的文本框,c#,wpf,xaml,C#,Wpf,Xaml,我有一些文本框,可以在其中获取URL,当您将URL(长)放入其中时,我希望它向下移动一行,以便查看URL的最后一个字符。如何实现它 更改宽度大小的方法?类的TextBlock功能是,允许用户在文本末尾添加省略号(…),该省略号太长,无法在TextBlock中显示。如果您的TextBox没有用于文本输入,那么您只需使用TextBlock控件即可 如果您确实需要使用文本框,那么不幸的是,它没有这样的属性。另一种方法是使用具有此属性的自定义文本框。你可以在CodeProject的页面上找到一个例子

我有一些文本框,可以在其中获取URL,当您将URL(长)放入其中时,我希望它向下移动一行,以便查看URL的最后一个字符。
如何实现它
更改宽度大小的方法?

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

如果您确实需要使用
文本框
,那么不幸的是,它没有这样的属性。另一种方法是使用具有此属性的自定义
文本框。你可以在CodeProject的页面上找到一个例子


更新>>>

由于您没有显示任何代码,因此没有人可以告诉您做错了什么。无论如何,这是一个简单的问题,我相信你可以自己解决。将此添加到其他位置的其他视图:

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


现在,您应该能够看到
TextBlock
末尾的省略号。这就是它的简单之处。如果示例不起作用,则通过添加其他内容使其不起作用。

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

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

添加对System.Windows.Interactive(随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();
                };
        }
    }
}
使用System.Windows.Controls;
使用System.Windows.Interactive;
命名空间WpfApplication2
{
公共类AutoScrollToHomeBehavior:行为
{
受保护的覆盖无效附加()
{
AssociatedObject.LostFocus+=(tb,args)=>
{
(tb作为文本框);
};
}
}
}
将行为附加到文本框:

<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>


HI Shirdan,谢谢你,我尝试将文本框更改为建议的文本框,我在VS designer中看到了它,但当我运行它时,我看不到它,可能是什么问题?我所做的只是将标记中的名称从更改为HI PashaPash,我使用MVVM而不是直接事件,有一种方法可以做到这一点吗?CaretPosition不是一个依赖属性,所以您需要一个文本框的自定义行为来处理焦点丢失。请参阅我的编辑。
<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>