繁体   English   中英

事件处理程序无法在XAML中使用

[英]Event handlers not working in xaml

我的页面中有一个TextBox INotifyChangeProperty

所有事件处理程序(LostFocus,KeyDown,KeyUp)都不会触发。 在XAML后面,我有C#代码。

private void TextBox_KeyUp_For_Decimal(object sender, KeyEventArgs e)
{
}

这是XAML代码

<Grid Visibility="{Binding FreeInput, Converter={StaticResource  BoolToVisibilityConverter}}">
   <Grid.Resources>
      <TextBox 
         x:Key="StringDefaultPresenter" 
         x:Shared="False" 
         Text="{Binding Default, UpdateSourceTrigger=LostFocus}" CommandManager.PreviewExecuted="TextBox_PreviewExecuted" 
         LostFocus="Update_Default" 
         KeyDown="TextBox_KeyDown_For_String"/>
      <TextBox 
         x:Key="NumberDefaultPresenter" 
         x:Shared="False" 
         Text="{Binding Default, UpdateSourceTrigger=LostFocus}"
         CommandManager.PreviewExecuted="TextBox_PreviewExecuted" 
         LostFocus="Update_Default" 
         KeyDown="TextBox_KeyDown_For_Decimal" 
         KeyUp="TextBox_KeyUp_For_Decimal"/>
      <CheckBox 
         x:Key="BooleanDefaultPresenter" 
         x:Shared="False" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         LostFocus="Update_Default" 
         IsChecked="{Binding Default, Converter={l:DefaultValueConverter}, UpdateSourceTrigger=LostFocus}"/>
      <DatePicker 
         x:Key="DateTimeDefaultPresenter" 
         x:Shared="False" 
         SelectedDate="{Binding Default, Converter={l:DefaultValueConverter}, UpdateSourceTrigger=LostFocus}" 
         LostFocus="Update_Default"/>
      <Style x:Key="DefaultPresenterStyle" x:Shared="False" TargetType="ContentControl">
         <Style.Triggers>
            <DataTrigger Binding="{Binding DataType}" Value="{x:Static l:DataType.STRING}">
               <Setter Property="Content" Value="{StaticResource StringDefaultPresenter}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding DataType, Converter={l:EnumMatchToBoolConverter}, ConverterParameter={StaticResource NumberDataType}}" Value="True">
               <Setter Property="Content" Value="{StaticResource NumberDefaultPresenter}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding DataType}" Value="{x:Static l:DataType.BOOLEAN}">
               <Setter Property="Content" Value="{StaticResource BooleanDefaultPresenter}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding DataType}" Value="{x:Static l:DataType.DATE_TIME}">
               <Setter Property="Content" Value="{StaticResource DateTimeDefaultPresenter}"/>
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </Grid.Resources>
   <ContentControl Style="{StaticResource DefaultPresenterStyle}"/>
</Grid>

在我将x:Keys添加到文本框并添加样式之前,这是可行的。

找到了问题。 由于XAML虚拟化,处理程序没有附加到事件上,而是使用样式显式设置它们可以解决问题。

像这样将其添加到TextBox或本例中的ComboBox

      <ComboBox
         x:Key="StringLengthPresenter" x:Shared="False"
         SelectedItem="{Binding Length, UpdateSourceTrigger=PropertyChanged}">
         <ComboBox.Style>
           <Style TargetType="ComboBox">
             <EventSetter Event="SelectionChanged" Handler="Length_SelectionChanged"/>
           </Style>
         </ComboBox.Style>

暂无
暂无

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

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