2016-07-05 7 views
0

kann nicht deaktiviert werden Ich arbeite an einem WPF-Fenster mit einer ComboBox und habe das gefürchtete Access Key-Problem festgestellt. Durch meine Google-Fu habe ich festgestellt, dass ich es mit dem folgenden Code ausschalten kann;Die RecognizesAccessKey-Eigenschaft für ComboBox Dropdown

<Grid.Resources> 
    <Style TargetType="{x:Type ContentPresenter}"> 
     <Setter Property="RecognizesAccessKey" Value="False"/> 
    </Style> 
</Grid.Resources> 

Diese relativ gut funktioniert, wenn ein Element ausgewählt wird, zeigt er nun die Unterstrichen und ich brauche nicht hinter über alle .Replace(...) Anrufe im Code zu kümmern. Das Problem ist, dass es nur für das ausgewählte Element funktioniert, während alle anderen Elemente den Unterstrich ausgeblendet haben.

In der unteren Abbildung wählte ich AU-15003\SQLEXPRESS_2014 (ursprünglich war der Unterstrich ausgeblendet), der Unterstrich wurde angezeigt, wenn das Dropdown geschlossen wurde. Dann habe ich das Dropdown wieder geöffnet und der Unterstrich blieb für diesen Gegenstand. Die anderen Elemente haben immer noch keinen Unterstrich (SQLEXPRESS2008 folgt demselben Muster).

Ich bin mir nicht sicher, warum das ist, ich kann anscheinend keine anderen Orte finden, an denen ich die RecognizesAccessKey-Eigenschaft ausschalten könnte.

enter image description here

Antwort

1

Ich bin nicht sicher, was Sie versuchen hier zu tun, aber ich kann Ihnen sicher sagen, warum implizite Arten ContentPresenter Targeting eher nicht wie erwartet funktionieren.

Die Regel besteht darin, dass Vorlagen (ControlTemplates sowie DataTemplates) Grenzen für die Anwendung impliziter Stile sind, d. H. Implizite Stile, die außerhalb der Vorlage definiert sind, werden nicht auf Elemente in einer angewendet. Es gibt eine Ausnahme von dieser Regel - wenn der Zieltyp von Control stammt, wird der Stil auch innerhalb der Vorlagen angewendet. Und Sie können leicht überprüfen, dass ContentPresenter nicht von Control abgeleitet ist. Darüber hinaus ist der betreffende ContentPresenter (derjenige, der den Artikel in der Dropdown-Liste ComboBox anzeigt) in der Vorlage ComboBoxItem "lokalisiert".

Jetzt kann ich nichts spezifisch genug machen aus Ihrer Ausgabe aus dem Code zu reproduzieren Sie gepostet haben, aber ich kann Sie beraten, wie die ContentPresenter im ComboBox Drop-down zu optimieren - Ihre beste Wette ist, individuelle ComboBox.ItemTemplate liefern :

<ComboBox (...)> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ContentPresenter Content="{Binding}" RecognizesAccessKey="False" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Wenn Sie allgemeinere Lösung (eine, die Ihren Versuch ähnelt) möchten, können Sie ein impliziter Stil ComboBox schaffen könnten und Einstellung ComboBox.ItemTemplate Eigenschaft in ähnlicher Weise Targeting:

<Grid.Resources> 
    <Style TargetType="{x:Type ComboBox}"> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <ContentPresenter Content="{Binding}" RecognizesAccessKey="False" /> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Grid.Resources> 
+0

Ah, die Gefahren von Google-Fu. Das bringt mir bei, das Warum zu untersuchen, anstatt es nur zu reparieren. Ihre erste Lösung hat gut für mich funktioniert. Ich habe ein individuelles Styling über das Materialdesign und die zweite generische Lösung hat das Styling abgeschafft. – Trent

Verwandte Themen