2013-03-28 72 views
5

Tôi có một dự án ở đây, nơi tôi yêu cầu tùy chỉnh menu ngữ cảnh trong ứng dụng WPF của tôi, trong đó một nút sẽ được đặt ở cuối tất cả các menuitems.Tùy chỉnh Menu ngữ cảnh trong WPF

Tuy nhiên, nếu tôi thêm nút qua XAML, nó sẽ xuất hiện dưới dạng một mục khác trong bộ sưu tập trong menu ngữ cảnh và đánh dấu chuột qua sẽ tác động lên nó.

Tôi muốn trình đơn ngữ cảnh được điều chỉnh theo kiểu kiểu lưới, theo đó tôi có thể tùy chỉnh kiểu bên dưới.

Bất kỳ ý tưởng nào về cách tôi có thể đạt được điều này (tốt nhất là trong XAML)?

Trả lời

15

Nó thực sự khá đơn giản trong XAML. Chỉ cần xác định nó trong phần tử mà bạn muốn có menu ngữ cảnh.

 <Border> 
      <Border.ContextMenu> 
       <ContextMenu> 
        <ContextMenu.Template> 
         <ControlTemplate> 
          <Grid> 
           <!--Put anything you want in here.--> 
          </Grid> 
         </ControlTemplate> 
        </ContextMenu.Template> 
       </ContextMenu> 
      </Border.ContextMenu> 
     </Border> 
+0

Tuyệt vời! +1 đang tìm kiếm – VisualBean

+0

Hoạt động hoàn hảo này! :) –

4

Đối với menu item phong cách của bạn với các nút trong mục mà bạn có thể sử dụng đoạn mã sau:

Note - Thêm mục vào Header sẽ giữ nó trong cùng MenuItem, nhưng nếu thêm vào MenuItem chỉ nó sẽ được coi là MenuItem mới.

<ContextMenu> 
    <ContextMenu.Items> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 1"/> 
       <Button Content="Button 1" Margin="5"/> 
      </StackPanel> 
      </MenuItem.Header> 
     </MenuItem> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 2"/> 
       <Button Content="Button 2" Margin="5"/> 
       </StackPanel> 
      </MenuItem.Header> 
      </MenuItem> 
    </ContextMenu.Items> 
</ContextMenu> 

Đây sẽ là kết quả ContextMenu:

enter image description here

Từ đó bạn có thể tạo kiểu cho MenuItem hoặc Button, vv

Hy vọng nó sẽ giúp!

1

Bạn có thể bắt đầu với ví dụ phong cách/mẫu (từ here) cho ContextMenu và điều chỉnh nó cho nhu cầu của bạn.

<Style TargetType="{x:Type ContextMenu}"> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Grid.IsSharedSizeScope" Value="true" /> 
    <Setter Property="HasDropShadow" Value="True" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ContextMenu}"> 
     <Border x:Name="Border" 
       Background="{StaticResource MenuPopupBrush}" 
       BorderThickness="1"> 
      <Border.BorderBrush> 
      <SolidColorBrush Color="{StaticResource BorderMediumColor}" /> 
      </Border.BorderBrush> 
      <StackPanel IsItemsHost="True" 
         KeyboardNavigation.DirectionalNavigation="Cycle" /> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="HasDropShadow" Value="true"> 
      <Setter TargetName="Border" Property="Padding" Value="0,3,0,3" /> 
      <Setter TargetName="Border" Property="CornerRadius" Value="4" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

Cũng xem https://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx để tạo kiểu cho 'MenuItem'. –

Các vấn đề liên quan