처음에는 TextBlock을위한 특정 스타일을 만든 다음 스타일 안에 ContextMenu를 넣을 수 있다고 생각했습니다. 그러나 TextBlock은 ContentControl에서 상속되지 않으므로 간단히 수행 할 수 없습니다.
그러면 할 수있는 일은 TextBlock 대신 Label을 사용하는 것입니다. SDK를 네임 스페이스를 포함하면,
의 xmlns를 이런 식으로 뭔가를 할 것이다 : SDK = "http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
<sdk:Label Content="{Binding Preview}"
FontWeight="{Binding IsBold, Converter={StaticResource cnvFontWeight}}"
Foreground="{Binding IsOverdueMessage, Converter={StaticResource cnvOverdue}}"
VerticalAlignment="Center"
Margin="5,0,5,0"
Style="{StaticResource LabelWithContextMenuStyle}"/>
이 Label 컨트롤에 스타일을 지정했는지 확인할 수 있습니다.
이 스타일은 기본적으로 Label의 기본 스타일로 ContentControl 내에 추가 ContextMenu가 있습니다.
<Style x:Key="LabelWithContextMenuStyle" TargetType="sdk:Label">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:Label">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
<VisualStateGroup x:Name="ValidationStates">
<VisualState x:Name="Valid"/>
<VisualState x:Name="Invalid">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0:0:1.5" Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentControl">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red"/>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="RequiredStates">
<VisualState x:Name="NotRequired"/>
<VisualState x:Name="Required">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="FontWeight" Storyboard.TargetName="ContentControl">
<DiscreteObjectKeyFrame KeyTime="0" Value="SemiBold"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2" Padding="{TemplateBinding Padding}">
<ContentControl x:Name="ContentControl" Cursor="{TemplateBinding Cursor}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" FontWeight="{TemplateBinding FontWeight}" FontStretch="{TemplateBinding FontStretch}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsTabStop="False" VerticalAlignment="{TemplateBinding VerticalAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Margin="131,106,0,0">
<telerik:RadContextMenu.ContextMenu>
<telerik:RadContextMenu Opened="RadContextMenu_Opened" ItemClick="RadContextMenu_ItemClick">
<telerik:RadMenuItem Loaded="RadMenuItem_Loaded"/>
</telerik:RadContextMenu>
</telerik:RadContextMenu.ContextMenu>
</ContentControl>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
이것은 그 것이다. 이게 도움이 되길 바란다. :)
전체 DataTemplate이 동일하거나 ContextMenu 만 있습니까? 문맥 메뉴 만 – Mart
. 모든 열은 다른 바인딩을가집니다. – user278618
안녕하세요,이 질문을 잊어 버렸습니까? –