0

私のXAML:

  <Grid Background="White">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="1*"/>
      <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0">
      <StackPanel>
        <Grid Margin="5" Background="LightGray">
          <TextBlock>Grid1</TextBlock>
        </Grid>
        <TextBlock Margin="5">TextBlock1</TextBlock>
        <CheckBox Margin="5">CheckBox1</CheckBox>
        <Button Margin="5">Button1</Button>
      </StackPanel>
    </ScrollViewer>
    <StackPanel Grid.Column="1">
      <Grid Margin="5" Background="LightGray">
        <TextBlock>Grid2</TextBlock>
      </Grid>
      <TextBlock Margin="5">TextBlock2</TextBlock>
      <CheckBox Margin="5">CheckBox2</CheckBox>
      <Button Margin="5">Button2</Button>
    </StackPanel>
  </Grid>

これにより、次の出力が得られます。

UI出力

これが私の問題です。Button2にフォーカスがある場合、 Grid2またはTextBlock2をクリックしてもフォーカスは変わりません。ただし、Button1にフォーカスがあり、 Grid1またはTextBlock1をクリックすると、フォーカスはButton1から削除されます。なんで?私にとっては、パネルをScrollViewerで囲むと、フォーカス ロジックが壊れているように見えます。

前もって感謝します。

4

1 に答える 1

2

部分的にお答えできます...

ScrollViewerをコンテナとして使用し、コントロールがScrollViewerフォーカスを取得できない場所をクリックすると、ScrollViewerそれ自体がフォーカスを取得するため、フォーカスを取得しないようScrollViewerにするには、そのプロパティを無効にしますIsTabStop

私はこれを試しましたが、またはのScrollViewerようなフォーカス処理なしでコントロールをクリックしてもフォーカスが得られませんが、フォーカスはまだ奇妙な動作をしています。そのため、前に「部分的に」と言ったのです。GridTextblock

オンに設定IsTabStopして、自分で確認してください...falseScrollViewer

また、 「フォーカス インスペクタ」を実装する方法を提案したこの投稿も参照してください。これはほんの数行のコードです。

于 2012-11-09T14:22:14.980 に答える