2016-04-25 14 views
0

私はtabcontrolアイテムにあるデータグリッドを持っています。 私は、データグリッドの行をダブルクリックすると、タブコントロールがタブを変更したい。WPF、C# - データグリッドの行でdoubleclickで選択したタブを変更

はHERESに私のコード:

private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e) 
    { 

     tabControl.SelectedItem = tiUebersicht; 
    } 

しかし、タブが変更されません。

<TabItem 
      x:Name="tiDashboard" 
      Header="Dashboard" 
      Background="White"> 

      <Grid> 
        <DataGrid 
          IsReadOnly="True" 
          x:Name="dgAnzeigeWerk" 
          AutoGenerateColumns="false" 
          Margin="0,10,0,249" 
          HeadersVisibility="Column" 
          RowHeight="25" HorizontalAlignment="Left" Width="492"> 

         <DataGrid.Resources> 
          <Style TargetType="{x:Type DataGridRow}"> 
           <EventSetter Event="Control.MouseDoubleClick" Handler="dgAnzeigeWerk_Row_DoubleClick"/> 
          </Style> 
         </DataGrid.Resources> 

         <DataGrid.Columns> 
          <DataGridTextColumn Width="auto" Header="Nummer" Binding="{Binding Kostenstellennummer}"/> 
          <DataGridTextColumn Width="auto" Header="Kostenstelle" Binding="{Binding Kostenstelle}"/> 
          <DataGridTextColumn Width="*" Header="Kosten" Binding="{Binding Kosten}"/> 
         </DataGrid.Columns> 

        </DataGrid> 
        <ComboBox x:Name="cbYearWerk" HorizontalAlignment="Left" Height="25" Margin="497,10,0,0" VerticalAlignment="Top" Width="98" VerticalContentAlignment="Center" SelectionChanged="cbYearWerk_SelectionChanged"/> 
        <Separator Height="15" Margin="0,-10,0,0" VerticalAlignment="Top"/> 

       </Grid> 
      </Grid> 
     </TabItem> 
... 

私はこのコードを使用するのTabItemを変更するには。ボタンを使って同じコードを実行しようとしましたが、うまくいきました。 tabControl.SelectedIndex = 2またはtiUebersicht.IsSelected = trueも試しましたが、成功しませんでした。

提案がありますか?

+1

投稿してください、あなたの 'TabControl'のフルコードと' tiUebersicht'は何ですか? – StepUp

+0

'tiUebersicht'は' tabControl'のtabitemです。 TabControl自体は特別なものではありません –

答えて

0

Dispatcherイベントが内部にあります。

Link to similar question

Dispatcher.InvokeAsync(() => tiUebersicht.IsSelected = true); 
Dispatcher.Invoke(() => tiUebersicht.IsSelected = true); 
Dispatcher.InvokeAsync(() => tabControl.SelectedItem = tiUebersicht); 
Dispatcher.Invoke(() => tabControl.SelectedItem = tiUebersicht); 
+0

なぜ私は行doubleclickでディスパッチャを呼び出さなければなりませんか? –

1

最後に、あなたのハンドラにe.Handled = true;を追加します。

private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     tabControl.SelectedItem = tiUebersicht; 
     e.Handled = true; 
    } 

実際に選択が変更されたが、そのは非常に高速でピントDataGridを含む1に戻っている出来事。これは、TabControlSelectionChangedイベントを使用して確認できます。

関連する問題