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