我有一個模板列表框,其中包含一個wpf文本框。數據通過ItemsSource提供給列表框。單行wpf文本框水平滾動到結尾
文本框顯示文件路徑,這些通常很長。我希望在加載文本框時顯示文件路徑的結尾。
我嘗試了DataContextChanged
事件和設置HorizontalScrollBarVisibility
(使用double.max或獲取真正的字符長度)的組合,但沒有成功。 DataContextChanged似乎是正確的事件,因爲它觸發ItemsSource的每個設置。
編輯:
下面是示例代碼顯示在萊斯特的建議可行,當它不。我試圖通過綁定設置文本時使其工作。
<Window x:Class="WpfAppTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Loaded="LoadedHandler">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBox Name="tbb" Width="50" Height="20" Text="{Binding Path=Str}"
IsReadOnly="True" Grid.Column="0" Grid.Row="0"
DataContextChanged="ContextChangedHandler"/>
<ListBox SelectionMode="Single" x:Name="listBox" Grid.Column="0" Grid.Row="1"
VerticalAlignment="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Width="50" Height="20" Text="{Binding Path=Str}"
IsReadOnly="True"
DataContextChanged="ContextChangedHandler"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var obj = new SomeClass
{
Str = "qwetyuiuropqo[psdal;dkas;ldamzxn m,cnz128391"
};
listBox.ItemsSource = new List<SomeClass> { obj };
tbb.DataContext = obj;
}
public class SomeClass
{
public string Str { get; set; }
}
private void LoadedHandler(object sender, RoutedEventArgs e)
{
var obj = new SomeClass
{
Str = "qwetyuiuropqo[psdal;dkas;ldamzxn m,cnz128391"
};
listBox.ItemsSource = new List<SomeClass> { obj };
tbb.DataContext = obj;
}
private void ContextChangedHandler(object sender, DependencyPropertyChangedEventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
textBox.CaretIndex = textBox.Text.Length;
var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
textBox.ScrollToHorizontalOffset(rect.Right);
}
}
你可以發佈你試過的代碼嗎?謝謝。 – Tom
您正在尋找的不僅僅是TextWrapping?你想修剪開始? – Paparazzi
你知道TextBlock有一個TextTrimming屬性,但它從右側修剪。如果你只想要文字結束,你可以有一個只返回文件名而不是完整路徑的屬性。 – Paparazzi