2011-09-12 9 views
1

次の問題があります。私はWPFアプリケーションでTextBoxを持っています。非常に長いテキスト(テキストボックスのフィールドに表示できるものより多くの文字) を入力すると、そのテキストボックスのフィールドから(たとえば、他のテキストボックスに)移動するよりも、ちょうど入力したテキストが右にとどまります - 調整された(私がそれを去ったところ)。 つまり、Homeキーを押すか、画面を閉じてもう一度開いていない限り、テキストの先頭を再表示することはできません。 ウィンドウ上の他のテキストボックスに移動した後、テキストを左に揃えることはできますか。私はおそらく、「魚」溶液で試してみましたし、それが動作しません:テキストがTextBoxの幅よりも長い場合、フォーカスが失われた後のTextBoxとTextAlignment

private void TextEditControl_LostFocus(object sender, RoutedEventArgs e) 
    { 
     var textBox = sender as TextBox; 
     if (textBox != null) 
     { 
      textBox.Dispatcher.BeginInvoke(
       DispatcherPriority.Send, 
       new Action(() => SendKeys.SendWait("{HOME}"))); 
     } 
    } 

答えて

2

はこのお試しください:ティム・ダム答えにMeleakのノートを1として

textBox.SelectionStart = 0; 
+0

+1、サイドノートでは、再利用性のために添付の動作に変わる可能性があります。 –

1

を、ここにあなたのようにそれを行う方法です添付の行動:

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

public static class TextBoxBehavior 
{ 
    public static bool GetHomeOnLostFocus(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(HomeOnLostFocusProperty); 
    } 

    public static void SetHomeOnLostFocus(DependencyObject obj, bool value) 
    { 
     obj.SetValue(HomeOnLostFocusProperty, value); 
    } 

    // Using a DependencyProperty as the backing store for HomeOnLostFocus. 
    // This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty HomeOnLostFocusProperty = 
     DependencyProperty.RegisterAttached(
      "HomeOnLostFocus", 
      typeof(bool), 
      typeof(TextBoxBehavior), 
      new UIPropertyMetadata(false, OnHomeOnLostFocusChanged)); 

    public static void OnHomeOnLostFocusChanged(
     DependencyObject d, 
     DependencyPropertyChangedEventArgs e) 
    { 
     // Type checking and casting of parameters 
     bool oldVal = (bool)e.OldValue; 
     bool newVal = (bool)e.NewValue; 
     TextBox textBox = d as TextBox; 

     // Argument value tests 
     if (textBox == null) return; 
     if (oldVal == newVal) return; 

     // If HomeOnLostFocus then add event handler, otherwise, remove it. 
     if (newVal) 
      textBox.LostFocus += TextBox_LostFocus; 
     else 
      textBox.LostFocus -= TextBox_LostFocus; 
    } 

    static void TextBox_LostFocus(object sender, RoutedEventArgs e) 
    { 
     var textBox = (TextBox)sender; 
     textBox.SelectionStart = 0; 
    } 
} 

PresentationCorePresentationFrameworkSystem.XamlWindowsBaseアセンブリへの参照が必要です。ここで

は使用例です:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:tbb="clr-namespace:TextBoxBehavior;assembly=TextBoxBehavior" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel> 
     <TextBox Width="200"/> 
     <TextBox tbb:TextBoxBehavior.HomeOnLostFocus="true" Width="200"/> 
     <Button Content="Dummy" Width="200"/> 
    </StackPanel> 
</Window> 

は、第二TextBoxxmlns:tbb属性とその使用方法に注意してください。

+0

Uf ...ありがとうございます...それは動作します! – SebastijanP

関連する問題