2010-08-20 9 views
4

ViewModel에 바인딩 된 ListView 안에 TextBox와 DropDown이 있습니다. comboBox가 정상적으로 작동하는 동안 TextBox 내부에 텍스트를 "입력"할 수 없습니다. Backspace/SpaceBar/Ctrl + C/Ctrl + V는 정상적으로 작동하지만 영숫자 키를 누르면 마침내 TextBox에 텍스트가 표시됩니다.GridView/ListView (WPF) 내 TextBox에 텍스트를 입력 할 수 없습니다.

빈 KeyUp/KeyDown/TextChange 이벤트 처리기를 사용하여 확인했습니다. 모든 키 입력 유형에 대해 KeyUp/KeyDown 이벤트를 발생 시키지만 영숫자 키를 누르면 TextChange가 트리거되지 않습니다.

누군가가이 문제에 직면했는지 제안하십시오. 또는 실제 문제를 디버그하고 찾을 수있는 방법이있는 경우.

이것은 내 XAML로, 코드 뒤에는 없습니다.

<Window x:Class="Ion.MarketView.Mmi.Plugins.AlertConfigurator.View.AlertConditionItemViewDebug" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      x:Name="aletConditionItems" 
      mc:Ignorable="d" > 
     <Grid > 
      <Grid.Resources> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
        <Setter Property="VerticalContentAlignment" Value="Stretch" /> 
       </Style> 
      </Grid.Resources> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
       <ColumnDefinition Width="75"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <ListView Grid.Column="0" x:Name="lstViewConditionItems"      
        ItemsSource="{Binding ElementName=aletConditionItems, Path=DataContext.Items}"       
        SelectedItem="{Binding ElementName=aletConditionItems, Path=DataContext.SelectedItem, Mode=TwoWay}"> 
       <ListView.View> 
        <GridView> 
        <GridViewColumn Header="Column Id" > 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <ComboBox SelectedValue="{Binding Path=ColumnId}" Margin="-6,-2,-6,-2"     
        ItemsSource="{Binding ElementName=aletConditionItems, Path=DataContext.ColumnIds}" /> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

         <GridViewColumn Header="Value" Width="100" > 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <TextBox Text="Only backSpace and SpaceBar works" ></TextBox> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 


        </GridView> 
       </ListView.View> 
      </ListView> 

      <StackPanel Orientation="Horizontal" Grid.Column="1" VerticalAlignment="Top" > 
       <Button Content="+" Width="30" Command="{Binding ElementName=aletConditionItems, Path=DataContext.OnAddConditionItem}"></Button> 
      </StackPanel> 
     </Grid> 
    </Window> 

관심을 가져 주셔서 감사합니다.

참고 : 1)이 WPF 창을 WinForm 응용 프로그램에서로드하고 있습니다.

2) 문제는 textBox와 viewModel의 바인딩에 있지 않습니다. 텍스트 속성 (위 코드와 같이)에 하드 코드 된 간단한 텍스트를 편집 할 수조차가 없습니다.

3) 상위 컨트롤에서 "모든"이벤트 처리기를 등록하지 않았습니다.

해결책 : @HCL에서 제안한 링크에 따라 다음 코드가 내 문제를 해결했습니다.

Window window1 = new Window(); 

ElementHost.EnableModelessKeyboardInterop(window1); //This is needed for Sharing Message Loops Between Win32 and WPF 

window1.Show(); 

답변

4

wpf-window가 win-forms-application에 통합 된 경우 이러한 동작이 발생했습니다. 이 경우 댓글을 남기십시오.

그렇지 않은 경우, e.Handled 속성을 true로 설정하는 부모 요소 (window, usercontrol, grid)에 PreviewKeyDown 이벤트 핸들러를 등록했는지 확인하십시오 (또는 기타 등록 된 preview-event-handler 키보드 입력 다루기).

복사하여 붙여 넣기와 공백이 작동한다고 작성했기 때문에 부모 요소 나 스타일 또는 컨트롤 템플릿의 TextBox.IsReadOnly를 부모 요소 또는 암시 적 스타일로 설정하지 않았다고 가정합니다.

한 가지 더 : 라인

<TextBox Text="Only backSpace and SpaceBar works" ></TextBox> 

정말 일을하거나 당신이하지 않는 라인이 구속력이없는 작품?

업데이트 :

좋아,이 윈 - 폼 응용 프로그램이기 때문에, 당신이는 Win32 메시지 루프에서 메시지를 리디렉션해야합니다. here, herehere을보십시오.

추가 팁 : 통합 된 WPF 창에서 새 창 만들기에주의하십시오. 내가 노인 프로젝트에서 기억하는 한, 새로운 자녀 창으로 메시지를 전달해야합니다.

+0

작동하지 않는 행입니다. 처음에는 바인딩이 있었지만 단순성을 위해 텍스트를 직접 작성했습니다.TextBox가 Text 속성에서 설정할 수있는 내용을 입력 할 수 없습니다. –

+0

또한 정확합니다. WinForm 응용 프로그램에서이 WPF 창을로드하고 있습니다. 내 질문에 그 말하기. –

+0

답변을 업데이트했습니다. 희망이 도움이됩니다. – HCL

관련 문제