Dee Choksi
Dee Choksi

Reputation: 125

wpf ContextMenu Style

I have context menu when I right click on datagrid. It works exactly what I want but issue is, this menu style override existing menu style. I want to apply ControlTemplate only to this menu. Pls help.

Here is XAML

<ContextMenu  x:Key="cellContextMenu">
    <MenuItem Header="Insert symbol" Margin="0,0,0,0" HorizontalContentAlignment="Right">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
            <wpfc:SymbolController x:Name="dgSymbolControl" Width="400" Height="400" value="{Binding Path=SelectedSymbolItem, Mode=TwoWay, diagnostics:PresentationTraceSources.TraceLevel=High}"></wpfc:SymbolController>
            <TextBlock FontFamily="DYMObvba" Text="{Binding ElementName=dgSymbolControl, Path=value}" />
        </StackPanel>
    </MenuItem>
</ContextMenu>
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" TargetType="{x:Type MenuItem}">
    <Grid>
        <Border Name="Check" Visibility="Collapsed" Margin="0,0,0,0"></Border>
        <ContentPresenter Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True"/>
    </Grid>
</ControlTemplate>

Here is Code to apply Menu:

eCell.ContextMenu = (ContextMenu)FindResource("cellContextMenu");

Thanks Dee

Upvotes: 0

Views: 2472

Answers (1)

NoOne
NoOne

Reputation: 4091

I would try to define the ControlTemplate inside the ContextMenu:

<ContextMenu  x:Key="cellContextMenu">
<ContextMenu.Resources>
...
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" TargetType="{x:Type MenuItem}">
    <Grid>
        <Border Name="Check" Visibility="Collapsed" Margin="0,0,0,0"></Border>
        <ContentPresenter Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True"/>
    </Grid>
</ControlTemplate>
</ContextMenu.Resources>
    <MenuItem Header="Insert symbol" Margin="0,0,0,0" HorizontalContentAlignment="Right">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
            <wpfc:SymbolController x:Name="dgSymbolControl" Width="400" Height="400" value="{Binding Path=SelectedSymbolItem, Mode=TwoWay, diagnostics:PresentationTraceSources.TraceLevel=High}"></wpfc:SymbolController>
            <TextBlock FontFamily="DYMObvba" Text="{Binding ElementName=dgSymbolControl, Path=value}" />
        </StackPanel>
    </MenuItem>
</ContextMenu>

...or set the Style of the MenuItem in XAML :

<ContextMenu x:Key="cellContextMenu">
    <MenuItem Style="MyMenuStyle" Header="Insert symbol" Margin="0,0,0,0" HorizontalContentAlignment="Right">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,0">
            <wpfc:SymbolController x:Name="dgSymbolControl" Width="400" Height="400" value="{Binding Path=SelectedSymbolItem, Mode=TwoWay, diagnostics:PresentationTraceSources.TraceLevel=High}"></wpfc:SymbolController>
            <TextBlock FontFamily="DYMObvba" Text="{Binding ElementName=dgSymbolControl, Path=value}" />
        </StackPanel>
    </MenuItem>
</ContextMenu>

<Style x:Key="MyMenuStyle" TargetType="{x:Type MenuItem}">
    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" TargetType="{x:Type MenuItem}">
        <Grid>
            <Border Name="Check" Visibility="Collapsed" Margin="0,0,0,0"></Border>
            <ContentPresenter Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True"/>
        </Grid>
    </ControlTemplate>
</Style>

Upvotes: 1

Related Questions