繁体   English   中英

WPF绑定(使用触发器)从文本框到标签不起作用

[英]WPF Binding (Using Trigger) not working from TextBox to Label

朋友,我是WPF MVVM结构的新手。 我试图使用触发器将TextField值复制到Label。 我在做什么是在下面的xaml代码中。

VehicalForm.xaml

        <Window x:Class="Seris.VehicalForm"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="500" Width="600">
<Control>
    <Control.Template>
        <ControlTemplate>
            <WrapPanel Orientation="Vertical" Margin="10 " >
                <Label Content="Vehical No" HorizontalAlignment="Left"/>
                <TextBox Name="VehicalNo_Text" Height="23" Width="80" TextWrapping="Wrap" Text="{Binding VehicalNo}"  HorizontalAlignment="Left" />
                <Label Content="Model" HorizontalAlignment="Left"/>
                <TextBox Name="Model_Text" Height="23" Width="80" TextWrapping="Wrap" Text="{Binding Model}" HorizontalAlignment="Left" />
                <Label Content="Manufacturing Date" HorizontalAlignment="Left"/>
                <DatePicker Name="ManufacturingDate_DateTime" SelectedDate="{Binding ManufacturingDate, Mode=TwoWay}"/>
                <Label Content="IU No" HorizontalAlignment="Left"/>
                <TextBox Height="23" Width="80" Name="IUNO_Text" TextWrapping="Wrap" Text="{Binding IUNo}" HorizontalAlignment="Left"/>
                <Label Content="Personnel" HorizontalAlignment="Left"/>
                <ComboBox Name="Personnel_Combo" SelectedValue="{Binding PersonnelNameSelected}" ItemsSource="{Binding PersonnelName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" HorizontalAlignment="Left" Width="116"/>
                <Separator Height="20" RenderTransformOrigin="0.5,0.5" Width="16"/>
                <Button Name="Save_Button" Command="{Binding SaveButton_Command}" Content="Save" Width="66"/>
                <Label x:Name="Error_Label" Content="{Binding ErrorMessage, UpdateSourceTrigger=PropertyChanged}" Foreground="Red" HorizontalAlignment="Left" Height="41" Width="137"/>
                <ListView Name ="Grid" Height="294" Width="371" >
                    <DataGrid Name="DG" ItemsSource="{Binding ListItems, UpdateSourceTrigger=PropertyChanged}" SelectionUnit="Cell" GridLinesVisibility="None" IsReadOnly="True" AutoGenerateColumns="False" BorderThickness="0">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Vehical No" Binding="{Binding VehicalNo}" />
                            <DataGridTextColumn Header="Model" Binding="{Binding Model}" />
                            <DataGridTextColumn Header="ManufacturingDate" Binding="{Binding ManufacturingDate}" />
                            <DataGridTextColumn Header="IUNo" Binding="{Binding IUNo}" />
                            <DataGridTextColumn Header="Personnel" Binding="{Binding PersonnelNameSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

                        </DataGrid.Columns>

                    </DataGrid>
                </ListView>
                <Label Name="Notification" Content="hjgj"/>

            </WrapPanel>
            <ControlTemplate.Triggers>
               <DataTrigger Binding="{Binding IsMouseOver, ElementName=VehicalNo_Text}" Value="true">
                    <Setter Property="Content" TargetName="Notification" Value="{Binding Text, UpdateSourceTrigger=PropertyChanged}"/>
                </DataTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Control.Template>
</Control>
</Window>

在这里,我无法将“ Vehical_Text”的值绑定到名为“ Notification”的Label。所以我的问题是,

1)如何使用触发器成功完成此操作2)我找不到IsMouseClick。 如果我需要mouseClick事件,请设置哪个属性。

对于绑定部分,您可以尝试

<Label Name="Notification"  
       Content="{Binding ElementName=VehicalNo_Text,  
       Path=Text, UpdateSourceTrigger=PropertyChanged}"/>

至于触发部分,您是指标签吗? 如果是这样,您可以尝试以下方法:

MouseDoubleClick="someEvent"
MouseDown="anotherEvent"/>

更新:
msdn为例。 需要设置控件名称:

<Control Name="someControl">  

然后在触发时访问控件内部的元素,

private void whatEverControl_MouseDown(object sender, MouseButtonEventArgs e)
{
    var text2paste = (sender as TextBox).Text;
    var target = (Label)someControl.Template.FindName("Notification", someControl);
    target.Content = text2paste;
}

您可以使用预览事件 (例如PreviewMouseDown,PreviewMouseLeftButtonDown等)在XAML中声明文本框事件处理程序

样本1

<StackPanel>
    <TextBox Name="VehicalNo_Text" Height="23" Width="80" TextWrapping="Wrap"  HorizontalAlignment="Left" >
        <TextBox.Triggers>
            <EventTrigger RoutedEvent="PreviewMouseDown">
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Notification" Storyboard.TargetProperty="Content">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding ElementName=VehicalNo_Text,Path=Text}"></DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>               
        </TextBox.Triggers>
    </TextBox>
    <Label Name="Notification"/>
</StackPanel>

样品2

<StackPanel>
    <TextBox Name="VehicalNo_Text" Height="23" Width="80" TextWrapping="Wrap"  HorizontalAlignment="Left" >
        <TextBox.Triggers>
            <EventTrigger RoutedEvent="TextBox.MouseDoubleClick">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Notification" Storyboard.TargetProperty="Content">
                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding ElementName=VehicalNo_Text,Path=Text}"></DiscreteObjectKeyFrame>
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </TextBox.Triggers>
    </TextBox>
    <Label Name="Notification" Content="change content"/>
</StackPanel>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM