2017-10-04 4 views
1

Ich habe eine ListBox, die ein Menü anzeigt, in dem der Benutzer in der Anwendung navigieren kann. Wenn Sie ein ListBox-Element auswählen, wird das entsprechende UserControl rechts neben dem Menü angezeigt. Einer der Menüpunkte (ABOUT) sollte jedoch nicht fokussierbar sein, sondern nur eine Aufgabe ausführen (Öffnen eines Popup-Fensters). Das ausgewählte Element sollte so bleiben, wie es zuvor war.Einen Mausklick auf ein ListBox-Objekt erkennen, wobei Focusable auf False gesetzt ist

Folgende Vorschläge in this link Ich habe versucht, die Focusable-Eigenschaft des relevanten ListBox-Elements auf eine boolesche Eigenschaft in der VM zu binden. Aber dann bekomme ich keine Updates für die SelectedIndex-Eigenschaft.

Gibt es einen Weg um dies zu umgehen?

ListBox displaying navigation options

XAML:

<ListBox Grid.Row="0" 
      ItemsSource="{Binding MenuButtonInfoList}" 
      SelectedIndex="{Binding SelectedMainMenuIndex, Mode=TwoWay}" 
      Background="Transparent" BorderBrush="Transparent" Padding="0" 
      VerticalContentAlignment="Center"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="Focusable" Value="{Binding Path=Focusable}" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border Style="{StaticResource MenuButtonBorder}"> 
       <StackPanel Orientation="Horizontal" Height="Auto"> 
        <Image Source="{Binding ImageFilePath}" 
          Style="{StaticResource MenuButtonImage}" /> 
        <Label Content="{Binding Label}" 
          Style="{StaticResource MenuButtonLabel}" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Sie [ 'IsHitTestVisible verwenden könnte 'von MSDN] (https://msdn.microsoft.com/en-us/library/system.windows.uielement.ishittestvisible (v = vs.110) .aspx) – XAMlMAX

+0

Warum machst du Wan t/erwarte, dass die SelectedIndex-Eigenschaft aktualisiert wird, wenn Sie das Element nicht auswählen können? – mm8

+0

Ich möchte den ListBox-Eintrag auswählen können, aber nicht, dass der Eintrag den Fokus haben soll. Mit den anderen Elementen werden sie eine Änderung im MainWindow-Layout verursachen, aber das ABOUT-Element öffnet ein Popup-Fenster. Daher macht es keinen Sinn, dass das ÜBER-Objekt den Fokus hat. – Oystein

Antwort

1

Sie eine benutzerdefinierte ControlTemplate für unfocusable Elemente definieren könnte, dass sie aussehen, wie sie nicht fokussiert werden:

<ListBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ListBoxItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Focusable}" Value="False"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
          <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" 
               BorderThickness="{TemplateBinding BorderThickness}" 
               Background="{TemplateBinding Background}" 
               Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
           <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 
+0

Keine schlechte Idee. Das zuvor ausgewählte Element verliert jedoch den Fokus, sodass keine Menüoptionen angezeigt werden. Ich hoffte, dass es möglich wäre, wenn ein Gegenstand nicht fokussierbar wäre, wäre es immer noch möglich, einen Klick darauf zu erkennen, aber der Fokus würde auf dem vorher ausgewählten Gegenstand bleiben. – Oystein

+1

Es wird immer den Fokus verlieren, wenn Sie auf ein anderes Element klicken. So soll der Fokus funktionieren ... – mm8

+0

Ich sehe .. Ich denke, ich muss nur einen Weg finden, das ausgewählte Objekt auf den zuvor ausgewählten Gegenstand zurückzusetzen, wenn es "unfokussierbare" Gegenstände behandelt. – Oystein

Verwandte Themen