4

ビューモデルにバインドされたListView内にTextBoxとDropDownがあります。comboBoxが正常に機能している間、TextBox内にテキストを「入力」することはできません。Backspace / SpaceBar / Ctrl + C / Ctrl + Vは正常に機能していますが、英数字キーを押すとすぐに、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)WinFormアプリケーションからこのWPFウィンドウを読み込んでいます。

2)問題は、textBoxとviewModelのバインドにはありません。Textプロパティにハードコードされている単純なテキストを編集することさえできません(上記のコードのように)

3)親コントロールに「any」イベントハンドラーを登録していません。

解決策: @HCLによって提案されたリンクに従って、次のコードで問題が修正されました。

Window window1 = new Window();

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

window1.Show();
4

1 に答える 1

4

wpf-windowがwin-forms-applicationに統合されている場合、このような動作を確認しました。これならコメントしてください。

そうでない場合は、e.Handled-propertyをtrueに設定する親要素(window、usercontrol、grid)にPreviewKeyDown-eventハンドラーを登録しているかどうかを確認します(またはキーボードを処理するその他の登録済みpreview-event-handler-入力)。

コピーと貼り付けとスペースが機能することを記述したため、TextBox.IsReadOnlyを親要素、または親要素または暗黙的なスタイルのスタイルまたはコントロールテンプレートに設定していないと想定します。

もう1つ:ラインは

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

本当に機能しないラインですか、それとも機能しないバインディングがありますか?

アップデート:

わかりました。これはwin-forms-applicationなので、win32メッセージループからメッセージをリダイレクトする必要があります。ここここここを見てください。

追加のヒント:統合されたWPFウィンドウ内から新しいウィンドウを作成する場合は注意が必要です。私が古いプロジェクトで覚えている限り、メッセージを新しい子ウィンドウに転送する必要もあります。

于 2010-08-20T08:11:59.383 に答える