代码
<TextBox Grid.Column="0" x:Name="textBox" Margin="10,5,0,5" TextWrapping="Wrap" Text="{Binding SendMessage,UpdateSourceTrigger=PropertyChanged}"
VerticalContentAlignment="Center" CaretBrush="Green" BorderBrush="{DynamicResource background_brush}" BorderThickness="0" FontSize="15" Padding="0" MinHeight="25" MaxHeight="150"
ScrollViewer.VerticalScrollBarVisibility="Auto" AcceptsReturn="True">
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="2"/>
</Style>
</TextBox.Resources>
<TextBox.InputBindings>
<!--键盘事件绑定-->
<KeyBinding Command="{Binding SendMessageFunCommand}" Key="Enter" Modifiers="Ctrl"/>
</TextBox.InputBindings>
</TextBox>
UpdateSourceTrigger解释
如果你想在用户输入时立即更新数据源,可以将UpdateSourceTrigger
设置为PropertyChanged
:
<TextBox Text="{Binding Path=UserName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
如果希望在TextBox失去焦点时更新数据源,可以将UpdateSourceTrigger
设置为LostFocus
(这是默认值):
<TextBox Text="{Binding Path=UserName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
如果需要手动控制更新时机,可以将UpdateSourceTrigger
设置为Explicit
,并在代码中调用UpdateSource
方法:
<TextBox x:Name="myTextBox" Text="{Binding Path=UserName, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
然后在代码中调用:
var bindingExpression = myTextBox.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateSource();
通过这些方法,你可以灵活地控制TextBox数据绑定的更新时机。
允许回车换行:
若需同时支持Enter
键换行和提交,可通过AcceptsReturn
和InputBindings
区分行为:
<TextBox AcceptsReturn="True">
<TextBox.InputBindings>
<KeyBinding Command="{Binding SendMessageFunCommand}"
Key="Enter"
Modifiers="Ctrl"/>
</TextBox.InputBindings>
</TextBox>