2017-09-29 7 views
0

Je dois modifier le menu contextuel de la boîte combo intégrée (Copier, Couper, Coller) en ajoutant des images d'icônes aux éléments de menu.Modification d'un menu contextuel pour la liste déroulante modifiable (WPF)

J'ai ajouté le menu contextuel souhaité à PART_EditableTextBox dans le modèle de contrôle ComboBox et inclus le modèle en tant que ressource.

<TextBox x:Name="PART_EditableTextBox" 
       Style="{x:Null}" 
       Template="{StaticResource ComboBoxTextBox}" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Bottom" 
       Margin="3,3,23,3" 
       Focusable="True" 
       Background="Transparent" 
       Visibility="Hidden" 
       IsReadOnly="{TemplateBinding IsReadOnly}"> 
         <TextBox.ContextMenu> 
          <ContextMenu> 
           <MenuItem Header="Copy" 
              Command="ApplicationCommands.Copy"> 
            <MenuItem.Icon> 
             <Image Source="pack://application:,,,/testApp.UI;component/ViewModels/PngImages/Copy.ico" Style="{StaticResource ResourceKey=ImageStyleSmall}" /> 
            </MenuItem.Icon> 
           </MenuItem> 
           <MenuItem Header="Cut" 
              Command="ApplicationCommands.Cut"> 
            <MenuItem.Icon> 
             <Image Source="pack://application:,,,/testApp.UI;component/ViewModels/PngImages/Cut.ico" Style="{StaticResource ResourceKey=ImageStyleSmall}" /> 
            </MenuItem.Icon> 
           </MenuItem> 
           <MenuItem Header="Paste" 
              Command="ApplicationCommands.Paste"> 
            <MenuItem.Icon> 
             <Image Source="pack://application:,,,testApp.UI;component/ViewModels/PngImages/Paste.ico" Style="{StaticResource ResourceKey=ImageStyleSmall}" /> 
            </MenuItem.Icon> 
           </MenuItem> 
          </ContextMenu> 
         </TextBox.ContextMenu> 
        </TextBox> 

Lorsque l'application fonctionne, le menu contextuel fonctionne comme prévu, mais l'effet secondaire est que ma zone de liste déroulante a perdu une frontière.

Répondre

0

Dans mon essai d'origine J'ai utilisé le modèle de contrôle que j'ai copié à partir du site MSDN (à l'adresse docs.microsoft.com/en-us/dotnet/framework/wpf/controls/...). Ensuite, j'ai adopté une approche différente: créer une petite application, ajouter une zone de liste déroulante et sélectionner l'option Modifier le modèle. Apporter des modifications similaires à ce modèle et le faire fonctionner. J'ai à la fois le menu contextuel qui fonctionne et la bordure de la zone de liste déroulante intacte.

0

Qu'en est-il de votre modèle "ComboBoxTextBox"? Avez-vous une frontière là-bas?

+0

Je n'ai pas modifié ce modèle, ni aucun autre. Le modèle ComboBoxTextBox a un élément border. –

0

Ci-dessous est la façon dont la partie à partir du style de la valeur par défaut TextBox est déclaré:

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
    <Setter Property="AllowDrop" Value="true"/> 
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 

En disant style = « {x: Null} », vous dites essentiellement le cadre « Je ne veux pas de cette!"

Remarque ces 2 lignes vous manquent pas:

<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> 
<Setter Property="BorderThickness" Value="1"/> 

Les autres propriétés manquantes seront probablement briser une onglet de navigation, l'interaction avec les périphériques, faites glisser & déposer, etc., ainsi

+0

J'ai suivi la suggestion, mais cela n'a pas aidé. –