TabControl上にSPREADを配置したときフォーカス枠が不正になる場合がある

文書番号 : 39508     文書種別 : 不具合     登録日 : 2016/07/21     最終更新日 : 2016/12/07
文書を印刷する
対象製品
SPREAD for WPF 1.0J
状況
修正済み
詳細
TabControlにSPREADを配置したとき、TabControlが配置されるコンテナのサイズにより、TabItem(タブ部分)のフォーカス枠がずれて表示されます。

【手順】
1. TabControl、SPREADおよびTextBoxコントロールを以下のように配置します。
◎サンプルコード(xaml)
<Grid Height="400">
  <TabControl Margin="0,25,0,0">
    <TabItem Header="TabItem">
      <sg:GcSpreadGrid />
    </TabItem>
  </TabControl>
  <TextBox HorizontalAlignment="Left" Height="23" Margin="150,0,0,0" VerticalAlignment="Top" Width="120"/>
</Grid>

2. プロジェクトを実行します。
3. TextBoxコントロールにフォーカスを移動し、Tabキーを押下します。
   --TabItemのフォーカス枠が不正な位置に表示されます。
回避方法
Service Pack 3(v1.0.2016.1207)で修正済みです。
Service Pack 3(v1.0.2016.1207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

次のようにOnGotKeyboardFocusメソッドをオーバーライドすることで回避できます。
◎サンプルコード(C#)
protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
  base.OnGotKeyboardFocus(e);

  var layer = System.Windows.Documents.AdornerLayer.GetAdornerLayer(this.Content as UIElement);
  if (layer != null)
  {
    this.Dispatcher.BeginInvoke(new Action<System.Windows.Documents.AdornerLayer>((l) => { l.Update(); }), System.Windows.Threading.DispatcherPriority.Render, layer);
  }
}