国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實現Menu和ContextMenu自定義風格及contextMenu自定義

2020-01-24 01:34:16
字體:
來源:轉載
供稿:網友

為了實現自定義的Menu和ContextMenu效果,下面演示代碼通過派生ProfessionalColorTable類,在自定義的類中重寫ProfessionalColorTable類的相關聯的屬性,從而實現自定義菜單效果。

using System.Drawing;using System.Windows.Forms;public class CustomToolStripColorTable : ProfessionalColorTable{  /// <summary>  /// 主菜單項被點擊后,展開的下拉菜單面板的邊框  /// </summary>  public override Color MenuBorder  {    get    {      return Color.FromArgb(37, 37, 37);    }  }  /// <summary>  /// 鼠標移動到菜單項(主菜單及下拉菜單)時,下拉菜單項的邊框  /// </summary>  public override Color MenuItemBorder  {    get    {      return Color.Transparent;    }  }  #region 頂級菜單被選中背景顏色  public override Color MenuItemSelectedGradientBegin  {    get    {      return Color.FromArgb(37, 37, 37);    }  }  public override Color MenuItemSelectedGradientEnd  {    get    {      return Color.FromArgb(37, 37, 37);    }  }  #endregion  #region 頂級菜單被按下是,菜單項背景色  public override Color MenuItemPressedGradientBegin  {    get    {      return Color.Black;    }  }  public override Color MenuItemPressedGradientMiddle  {    get    {      return Color.FromArgb(37, 37, 37);    }  }  public override Color MenuItemPressedGradientEnd  {    get    {      return Color.Black;    }  }  #endregion  /// <summary>  /// 菜單項被選中時的顏色  /// </summary>  public override Color MenuItemSelected  {    get    {      return Color.FromArgb(37, 37, 37);    }  }  #region 下拉菜單面板背景設置(不包括下拉菜單項)  //下拉菜單面板背景一共分為2個部分,左邊為圖像區域,右側為文本區域,需要分別設置  //ToolStripDropDownBackground設置文本部分的背景色  public override Color ToolStripDropDownBackground  {    get    {      return Color.Black;    }  }  //以ImageMarginGradient開頭的3個設置的是圖像部分的背景色,begin->end是從左到右的順序  public override Color ImageMarginGradientBegin  {    get    {      return Color.Black;    }  }  public override Color ImageMarginGradientMiddle  {    get    {      return Color.Black;    }  }  public override Color ImageMarginGradientEnd  {    get    {      return Color.Black;    }  }  #endregion}

然后對需要實現自定義風格的菜單(如:contextMenuStrip1)應用如下代碼:

contextMenuStrip1.RenderMode = ToolStripRenderMode.Professional;contextMenuStrip1.Renderer = new ToolStripProfessionalRenderer(new CustomToolStripColorTable());

ContextMenu的自定義

1.針對整個ContextMenu, 自定義一個Style,去掉豎分割線

<Style x:Key="DataGridColumnsHeaderContextMenuStyle" TargetType="{x:Type ContextMenu}">        <Setter Property="SnapsToDevicePixels" Value="True"/>        <Setter Property="Grid.IsSharedSizeScope" Value="true"/>        <Setter Property="HasDropShadow" Value="True"/>        <Setter Property="Template">          <Setter.Value>            <ControlTemplate TargetType="{x:Type ContextMenu}">              <Border Uid="Border_93">                <Border.Style>                  <Style TargetType="{x:Type Border}">                    <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.DropShadowKey}}"/>                    <Style.Triggers>                      <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource Self}}" Value="True">                        <Setter Property="Effect">                          <Setter.Value>                            <DropShadowEffect BlurRadius="4" Opacity="0.8" ShadowDepth="1"/>                          </Setter.Value>                        </Setter>                      </DataTrigger>                    </Style.Triggers>                  </Style>                </Border.Style>                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Uid="Border_50">                  <ScrollViewer CanContentScroll="True" Uid="ScrollViewer_9"              Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">                    <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Cycle" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Uid="ItemsPresenter_5"/>                  </ScrollViewer>                </Border>              </Border>            </ControlTemplate>          </Setter.Value>        </Setter>      </Style>

2. 針對其中的ItemContainerStyle來寫個MenuItem的control template

<Style x:Key="MenuItemStyle1" TargetType="{x:Type MenuItem}"> <Setter Property="Template" Value="{DynamicResource MenuItemControlTemplate1}"/> <Setter Property="Margin" Value="0"></Setter> <Setter Property="Padding" Value="0"></Setter> </Style> <ControlTemplate x:Key="MenuItemControlTemplate1" TargetType="{x:Type MenuItem}"> <Grid x:Name="grid" SnapsToDevicePixels="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" > <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="0" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsHighlighted" Value="True"> <Setter Property="Background" TargetName="grid" Value="{DynamicResource Brush_PA_CSW_ListBoxItemDefaultHighlight}"/> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="#FF9A9A9A"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>3. contextMenu使用上述style <ContextMenu x:Key="DataGridColumnsHeaderContextMenu"     ItemTemplate="{DynamicResource HeaderConfigItemTemplate}"     ItemContainerStyle="{DynamicResource MenuItemStyle1}"        Style="{DynamicResource DataGridColumnsHeaderContextMenuStyle}"/>

以上就是本文通過C#實現Menu和ContextMenu自定義風格及contextMenu自定義的全部內容,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昆山市| 龙口市| 玉山县| 平武县| 柘荣县| 湘阴县| 温州市| 育儿| 延长县| 株洲县| 汉阴县| 漾濞| 云霄县| 沿河| 呼伦贝尔市| 泰宁县| 岳阳县| 金溪县| 金乡县| 兴义市| 工布江达县| 静宁县| 沾益县| 镇原县| 上栗县| 宁蒗| 曲阜市| 社旗县| 泰州市| 常熟市| 黔西县| 长乐市| 和林格尔县| 盘锦市| 平江县| 高碑店市| 杭锦后旗| 黄浦区| 彩票| 庆元县| 拜泉县|