1
public partial class MultiTexbox_2 : Window
{
    Control texbox_full_details = null;      //get all textbox property and method in when gotfocused
    Control button_full_details;             //get all button property and method in when click event
    Button keyboard_button;     //behave like button

    public MultiTexbox_2()
    {
        this.InitializeComponent();

        // Insert code required on object creation below this point.
    }

    private void btn_a_Click(object sender, RoutedEventArgs e)
    {
        button_full_details = (Control)sender;
        all_in_one();

        //var caretIndex = txt_diplay_1.CaretIndex;
        //txt_diplay_1.Text = txt_diplay_1.Text.Insert(caretIndex, btn_a.Content.ToString());
        //txt_diplay_1.Focus(); 
        //txt_diplay_1.CaretIndex = caretIndex + 1;    


    }

     private void btn_b_Click(object sender, RoutedEventArgs e)
    {
        button_full_details = (Control)sender;

        all_in_one();
    }



    private void btn_c_Click(object sender, RoutedEventArgs e)
    {
        button_full_details = (Control)sender;

        all_in_one();
    }

    private void txt_diplay_1_GotFocus(object sender, RoutedEventArgs e)
    {
        texbox_full_details = (Control)sender;           

    }

    private void txt_diplay_2_GotFocus(object sender, RoutedEventArgs e)
    {
        texbox_full_details = (Control)sender;
    }


    public void all_in_one()
    {
        keyboard_button = button_full_details as Button;
        if (texbox_full_details != null)
        {
            //TextBox tb = texbox as TextBox;
            //tb.Text += btn.Content;

            TextBox txt_box = texbox_full_details as TextBox;
            var caret_index = txt_box.CaretIndex;
            txt_box.Text = txt_box.Text.Insert(caret_index, keyboard_button.Content.ToString());
            txt_box.Focus();
            txt_box.CaretIndex = caret_index + 1;               
        }           

    }
}

出力はこんな感じになります

結果1

しかし、このような出力が必要です

結果2

ボタンをクリックすると、コンテンツがテキストボックスにバインドされます。その時点で、現在バインドされているテキストボックステキストの背景色、フォントの色、フォントサイズが変更されます。そのような出力を取得するにはどうすればよいですか。助けてください。

4

2 に答える 2

1

SelectedText、SelectionStart、および SelectionLength を調べます。http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.aspx

tb.SelectionStart = tb.Length - 1;
tb.SelectionLength = 1;
于 2012-06-13T10:05:20.097 に答える
1

わかりましたので、特定の条件で、TextBox テキスト Zoom が必要です。
まず、EditedText と IsZoomed の 2 つのプロパティを持つクラスを作成します。

public class ZoomableText
{
    public string EditedText { get; set; }
    public Boolean IsZoomed { get; set; }
}

次に、Xaml を使用します。IsZoomed で DataTrigger を使用してスタイルを使用し、IsZoomed が true の場合に必要なテキスト アスペクトを変更します。このスタイルは、ウィンドウ リソース内またはアプリケーション リソース内で宣言できます。例 :

    <Style TargetType="TextBox" x:Key="LargerWhenFocusedTextBox">
        <Setter Property="FontSize" Value="12" />
        <Setter Property="FontWeight" Value="Normal" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsZoomed}" Value="True">
                <Setter Property="FontSize" Value="14" />
                <Setter Property="FontWeight" Value="Bold" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

それを使用するには、次のようにします。

     <StackPanel >
        <TextBox  Text="{Binding EditedText}" 
                  Style="{StaticResource LargerWhenFocusedTextBox}"  />
        <ToggleButton IsChecked="{Binding IsZoomed}" Content="Zoomed?" />
      </StackPanel >

StackPanel の DataContext を ZoomableText オブジェクトのインスタンスに設定する場所。

ZoomableText オブジェクトがそのプロパティに INotifyPropertyChanged を実装するようにしたい場合があります。

現在の変更については、ToggleButton の Checked イベントを処理します。

スタイルに Key を指定しない場合、すべての TextBox に自動的に適用されることに注意してください。

于 2012-06-13T10:23:17.770 に答える