wpf 如何更改属性Text与EvenTrigger“GotFocus”的绑定

hmmo2u0o  于 9个月前  发布在  Go
关注(0)|答案(2)|浏览(129)

我在WPF/XAML中使用文本框。我想更改属性Text与事件“GotFocus”的绑定。

  1. TextBox没有焦点(简化代码):<TextBox Text="{Binding ShortValue,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay,UpdateSourceTrigger=LostFocus}”
  2. TextBox有焦点:<TextBox Text="{Binding Value,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay,UpdateSourceTrigger=LostFocus}”
    更改属性Text的绑定将使用XAML创建。
    到目前为止,我有以下内容:
<TextBox>
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="GotFocus">
           <!-- I'm at a loss here -->
      </i:EventTrigger>
   </i:Interaction.Triggers>
</TextBox>

谢谢.

wlwcrazw

wlwcrazw1#

仅XAML解决方案

<TextBox>
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}"
               BasedOn="{StaticResource {x:Type TextBox}}">
            <Setter Property="Text" Value="{Binding ShortValue}" />
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Background" Value="Red" />
                    <Setter Property="Text" Value="{Binding Value}" />
                </Trigger>
            </Style.Triggers>
        </Style> 
    </TextBox.Style>
</TextBox>

请注意,您必须在样式中设置默认绑定(即ShortValue)。

qoefvg9y

qoefvg9y2#

Microsoft.Xaml.Behaviors.Wpf包中没有允许您在纯XAML中更改绑定的行为。
你可以在视图的代码后或附加的行为中处理事件,并创建一个新的绑定programmatically

private void TextBox_GotFocus(object sender, RoutedEventArgs e) =>
    ((TextBox)sender).SetBinding(TextBox.TextProperty, new Binding("Value"));

private void TextBox_LostFocus(object sender, RoutedEventArgs e) =>
    ((TextBox)sender).SetBinding(TextBox.TextProperty, new Binding("ShortValue"));

XAML:

<TextBox 
    Text="{Binding ShortValue}"
    GotFocus="TextBox_GotFocus"
    LostFocus="TextBox_LostFocus"/>

相关问题