2009-09-09 11 views
10

zachowanie ListBox jest to, że pierwszy element jest wybierany automatycznie, jak mogę tego uniknąć?ListBox zawsze automatycznie wybiera pierwszy element

Uwaga: Wolę robić to z czystym xaml, jeśli masz jakieś pomysły na kodowanie, proszę, nie zawracaj sobie głowy.

+0

Myślę, że u oznaczało, że gdy u przenieść fokus do pola listy, 1. pozycja jest zawsze wybrany? (podświetlone ... i jeśli naciśniesz, drugi element dostaje fokus?) –

+0

1) dla tego, który zaznaczył moje pytanie jako duplikat, nie zrozumiałeś pytania, ja też jestem tym, który wysłał duplikat. 2) @Madi, Kiedy listbox jest renderowany, jego pierwszy element jest wybierany automatycznie, chcę wyłączyć tę funkcję. – Shimmy

+0

hmm .. możesz użyć FocusManagera, aby skupić się na konkretnym przedmiocie/elemencie .. (wszystko w Xaml) ...jednak nie mogę wymyślić, jak skupić się na niczym: D –

Odpowiedz

5

No to próbowałem przy użyciu FocusManager.FocusedElement .. i dokonał intial ostrość do
sam listbox .. więc nie ma focus..but element jest wybrany .. jeśli u naciśnij lub zakładka zostanie wybrany ..the 1-cia element listbox ...

<Window 
    ...... 
    FocusManager.FocusedElement="{Binding ElementName=listbox2}"> 
    <ListBox x:Name="listbox2" HorizontalAlignment="Left" 
     VerticalAlignment="Bottom" Width="117.333" Height="116" 
     Margin="30.667,0,0,30"> 
     <ListBoxItem>Jim</ListBoxItem> 
     <ListBoxItem>Mark</ListBoxItem> 
     <ListBoxItem>Mandy</ListBoxItem> 
</ListBox> 
4

Można ustawić SelectedIndex na -1:

<ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/> 

Uwaga: Chcę to zrobić z czystego XAML, jeśli masz kodu źródłowego pomysły to proszę nie przejmuj się.

Niestety nie można zrobić wszystko, co w XAML ... zazwyczaj można uniknąć kod z opóźnieniem, ale trzeba jeszcze napisać konwertery, rozszerzenia znaczników lub dołączonych właściwości

+1

Szukałem odpowiedzi tak jak twoja. Jedynym małym problemem jest to, że nie działa. – Shimmy

+2

to nie działa :) –

+1

+1, nie można zrobić wszystkiego w XAML. – user7116

1

Czy SelectedIndex własnością jesteś szukasz? A może ja nie rozumiem twój punkt widzenia ...

+1

Dostałeś mój punkt, ale kiedy ustawiłem selectedindex na -1 lub alternatywnie wybrany element na x: Null, pierwszy element jest wciąż wybrany – Shimmy

1
<ListBox SelectioMode="Single" SelectedIndex="-1"/> 
+0

Nie chcę, aby tryb wyboru był Pojedynczy. – Shimmy

-1

dodać pustą pozycję.

1

Ten sam numer tutaj. Ktoś znalazł "czyste" rozwiązanie?
Problem jest taki sam, powoduje kilka wyzwalaczy do wykonania.

Oczywistym rozwiązaniem/Fix:
1) Usunąć obsługi zdarzeń SelectionChanged z XAML
2) Dodać obsługi w konstruktora InitializeComponents po załadowaniu do pulsowania.

+0

Powiązane pytania i komentarze shuold komentarze na temat istniejącego. – Shimmy

8

Spróbuj

IsSynchronizedWithCurrentItem="False"

5

usunąć IsSynchronizedWithCurrentItem = "True" add to w następnym SelectionChanged imprezy w razie potrzeby. To rozwiązało mój problem

2

Oto technika, której często używam. Opiera się on na powyższym przykładzie dodawania atrybutu FocusedElement do twojego Window lub UserControl.

Moja umowa jest taka, że ​​nie chcę, aby KAŻDA z kontrolek w moim oknie miała fokus. Rozwiązaniem dla mnie jest stworzenie kontrolki fikcyjnej, która nie ma interfejsu użytkownika i przypisuje do niej ostrość. Tak się składa, że ​​Control doskonale pasuje do tej roli:

<UserControl 
    x:Class="MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    FocusManager.FocusedElement="{Binding ElementName=focus_thief}" 
    mc:Ignorable="d"> 
    <Grid> 
     <!-- no renderable UI --> 
     <Control Name="focus_thief"/> 
     <!-- wants focus, but won't get it --> 
     <ListBox> 
      <ListBoxItem>First Item</ListBoxItem> 
     </ListBox> 
    </Grid> 
</UserControl> 
Powiązane problemy