C# ContextMenuService.Placement不';不能在MVVM模式的setter中工作
我已经讨论了前面的一些类似问题,但在ContextMenuService.Placement方面仍然存在问题。请建议 当我采用这种方法时,效果很好C# ContextMenuService.Placement不';不能在MVVM模式的setter中工作,c#,wpf,button,mvvm,contextmenu,C#,Wpf,Button,Mvvm,Contextmenu,我已经讨论了前面的一些类似问题,但在ContextMenuService.Placement方面仍然存在问题。请建议 当我采用这种方法时,效果很好 <Button x:Name="btn" Content="button" Click="b_Click" > <Button.ContextMenu > <ContextMenu > <MenuItem Header="Open"
<Button x:Name="btn" Content="button" Click="b_Click" >
<Button.ContextMenu >
<ContextMenu >
<MenuItem Header="Open" Command="{Binding OnOpen}" ></MenuItem>
<MenuItem Header="Close" Command="{Binding OnClose}"></MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
private void be_Click(object sender, RoutedEventArgs e)
{
btn.ContextMenu.PlacementTarget = btn;//Like this
btn.ContextMenu.Placement = PlacementMode.Top;//Like this
btn.ContextMenu.DataContext = btn.DataContext;
btn.ContextMenu.IsOpen = true;
}
私有void被单击(对象发送者,路由目标)
{
btn.ContextMenu.PlacementTarget=btn;//像这样
btn.ContextMenu.Placement=PlacementMode.Top;//像这样
btn.ContextMenu.DataContext=btn.DataContext;
btn.ContextMenu.IsOpen=true;
}
但它不适用于MVVM模式
<Button x:Name="btn" VerticalAlignment="Bottom" ContextMenuService.IsEnabled="False">
<Button.Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsEnabled">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu Name="AddReportContextMenu" HorizontalAlignment="Right">
<MenuItem Header="Open" Command="{Binding OnOpen}" ></MenuItem>
<MenuItem Header="Close" Command="{Binding OnClose}"></MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
我试着像这样在setter中添加它
<Setter Property="ContextMenu.PlacementTarget" Value="{Binding ElementName=btn}"></Setter>
<Setter Property="ContextMenu.Placement" Value="Top"></Setter>
或者像这样:
<Setter Property="ContextMenuService.Placement" Value="Top"></Setter>
如果ContextMenuService.IsEnabled未将其设置为false,则placement属性与如下的右键单击配合良好。我必须将其设置为false,以确保ContextMenu仅在左键单击时工作
<Button x:Name="btn" ContextMenuService.Placement="Top">
谢谢大家! 一种可能的解释是,如果上下文菜单太大,无法放在
按钮上方,那么它将显示在其他地方。你想过这个吗?谢谢迈克的回复。上下文菜单不是很大,它只包含两个按钮。当在代码隐藏逻辑中赋值时,它似乎也可以很好地工作,但在xaml中似乎无法使用setter属性。