Laden...

[WPF] Focus auf ein ListBoxItem setzen

Erstellt von eclere vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.838 Views
E
eclere Themenstarter:in
95 Beiträge seit 2006
vor 16 Jahren
[WPF] Focus auf ein ListBoxItem setzen

Hallo,

ich möchte gerne per Code den Focus auf ein bestimmtes ListBoxItem setzen.

Die SelectedIndex Eigentschaft setzen und anschliessend den Focus auf die Listbox selbst, bringt mir nichts, da der Focus erstmal nicht sichtbar ist.

Den Focus auf das SelectedItem setzen geht auch nicht, da ListBoxItem in meinem Fall eine eigene Klasse ist und nicht ein FrameworkElement.

Hat jemand einen Tipp?

Gruß Thorsten

F
722 Beiträge seit 2005
vor 16 Jahren

hallo eclere,

Den Focus auf das SelectedItem setzen geht auch nicht, da ListBoxItem in meinem Fall eine eigene Klasse ist und nicht ein FrameworkElement.

Wovon erbt deine Klasse denn? Um fokussieren zu können musst du zumindest von UIElement erben.

Weiterhin musst du in dieser Klasse UIElement.IsFocusable auf true setzten.
Dann wie gewohnt per UIElement.Focus() den Focus setzen.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo feadur,

er erbt gar nicht, oder? Es geht doch wohl darum, den Focus auf einen bestimmten Eintrag der ListBox zu setzen.

herbivore

F
722 Beiträge seit 2005
vor 16 Jahren

hallo herbivore,

ich habe es jetzt so verstanden, dass er statt ListBoxItem Objekten eigene Objekte in die ListBox einfügt, was ja in WPF möglich ist.
Also in der Form:


<ListBox>
<MeinControl>Item 1</MeinControl>
<MeinControl>Item 2</MeinControl>
</ListBox>

Wenn ListBoxItem Objekte verwendet werden sehe ich kein Problem fürs fokussieren, da diese über FrameworkElement von UIElement erben.

E
eclere Themenstarter:in
95 Beiträge seit 2006
vor 16 Jahren

Hallo,

ich füge ein ganz normale Klasse ein. Als Simples Beispiel sei der String genannt.

Ich habe aber zufällig einen Trick herausbekommen wie man das machen kann:

Erstmal die ItemSource Eigenschaft festlegen:

        Me.lstItems.ItemsSource = App.Manager.GetChannels

        If lstItems.SelectedIndex = -1 Then
            lstItems.SelectedIndex = 0
        End If
        Dim lbi As ListBoxItem = lstItems.ItemContainerGenerator.ContainerFromItem(lstItems.SelectedItem)

Das allein geht noch nicht. Wenn ich nun in XAML die Listbox so deklariere:

    <ListBox Margin="20 0 0 0" Name="lstItems" ItemTemplate="{StaticResource ChannelTemplate}" Style="{StaticResource RightListStyle}" ItemContainerStyle="{StaticResource RightListItemStyle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
      <ListBox.GroupStyle>
        <GroupStyle>
          
        </GroupStyle>
      </ListBox.GroupStyle>
    </ListBox>

gehts plötzlich. Die GroupStyle sind entscheidend. Keine Ahnung warum, hauptsache es geht.

Gruß Thorsten