TabControl switchen bei DragOver



  • Hallo,

    ich habe ein TabControl das zur Laufzeit geladen wird. Dabei stellt jeder Tab eine Zeile aus einer Datenbanktabelle dar. Nun ist in jedem Tab ein Haufen von Controls die man via Drag and Drop verschieben kann. Wie schaffe ich es allerdings, dass wenn ich mit einem Objekt über einen Reiter fahre zu diesem gewechselt wird?

    <TabControl Background="{x:Null}"
                                        BorderBrush="{x:Null}"
                                        Foreground="White"
                                        ItemsSource="{Binding Source={StaticResource SortierteYards},
                                                              IsAsync=True}">
                                <TabControl.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Yardname}" />
                                    </DataTemplate>
                                </TabControl.ItemTemplate>
                                <TabControl.ContentTemplate>
                                    <DataTemplate>
                                        <ListView ItemsSource="{Binding Source={StaticResource SortierteStandorte}}"
                                                  ItemTemplateSelector="{StaticResource ParkplatzSelector}"
                                                  ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                                            <ListView.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <WrapPanel IsItemsHost="True"
                                                               Orientation="Horizontal" />
                                                </ItemsPanelTemplate>
                                            </ListView.ItemsPanel>
                                        </ListView>
                                    </DataTemplate>
                                </TabControl.ContentTemplate>
                            </TabControl>
    


  • Du kannst bei jedem TabItem dem Event MouseEnter einen Handler hinzufügen.
    Sobald dieser Event geworfen wird, kannst du gucken welches TabItem der sender ist und dieses dann zum selektierten TabItem machen.

    private void TabItem_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        foreach (var item in TabControl1.Items)
        {
            var currentItem = item as TabItem;
    
            if (currentItem.Equals(sender))
            {
                TabControl1.SelectedItem = currentItem;
            }
        }
    }
    

    Der obige code funktioniert bei mir wunderbar.
    Eventuell musst du das ganze nicht auf den mouseEnter event sondern auf dem DragEnterEvent auslegen.

    Grüsse
    Chiller



  • Moin,

    an die Lösung hätte ich auch schon gedacht. Ich habe aber MVVM und weiß nicht so genau ob das nun ein Fall für den Code behind ist oder ob ich das ins VM legen soll. Was ist deine Meinung?



  • switcher schrieb:

    Moin,

    an die Lösung hätte ich auch schon gedacht. Ich habe aber MVVM und weiß nicht so genau ob das nun ein Fall für den Code behind ist oder ob ich das ins VM legen soll. Was ist deine Meinung?

    Nach meiner Meinung hat dies nichts im ViewModel zu tun, da es eine rein UI-abhängige Logik ist. Dies ist einer der Fälle wo ich einer View eine Implementierung in der Codebehind geben würde.



  • Hmmm, das ist meiner Meinung nach etwas was zum Design gehört.
    Somit gehört das meiner Meinung nach ins View. Da du das aber schlecht im XAML selber machen kannst, würde ich es ins ViewModel reinwerfen.

    Allerdings werde ich für die obige Aussage keine Garantie übernehmen, weil sonnst vermutlich wieder eine Diskussion losbricht wo das Zeug hingehört... 😃

    Grüsse
    Chiller



  • Bastel dir einfach ein Behavior:

    <TabControl ItemsSource="{Binding Items}"
                SelectedItem="{Binding CurrentItem}"
                Behaviors:MouseOverBehavior.SelectItem="True">
    </TabControl>
    

    dem VM ist es eigentlich egal ob das Selected Item durch ein Klick oder ein MouseOver kommt, d.h. die XAML soll sich drum kümmern, da sie es aber alleine nicht kann, überlässt man es einem Behavior.


Anmelden zum Antworten