Cod*_*gTT 5 wpf user-controls contextmenu
我的用户控件上下文菜单可见性无法绑定依赖项属性.任何的想法?
这是我的WPF代码
<UserControl.ContextMenu>
<ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}">
<MenuItem Command="local:GCommands.Edit" />
<MenuItem Command="local:GCommands.Delete" />
<MenuItem Command="local:GCommands.ExportFcsFiles" />
<MenuItem Command="local:GCommands.BatchExportStatistics" />
<Separator/>
<MenuItem Command="local:GCommands.SaveAs" Header="Save As..." />
</ContextMenu>
</UserControl.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
如果我设置Visibility ="Hidden",它将对我有用.像这样:
<ContextMenu Visibility="Hidden"/>
Run Code Online (Sandbox Code Playgroud)
如果使用它,它将无法正常工作
<ContextMenu Visibility="{Binding ElementName=wellControl, Path=IsInCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}">
Run Code Online (Sandbox Code Playgroud)
我很确定Visibility ="{Binding ElementName = wellControl,Path = IsInCompactMode,Converter = {StaticResource BooleanToVisibilityConverter}}"没有问题,因为它适用于其他人.
这是我的依赖属性
public bool IsInCompactMode
{
get {return (bool)GetValue(IsInCompactModeProperty); }
set {SetValue(IsInCompactModeProperty, value); }
}
public static readonly DependencyProperty IsInCompactModeProperty =
DependencyProperty.Register("IsInCompactMode", typeof(bool), typeof(WellControl), new PropertyMetadata(false));
Run Code Online (Sandbox Code Playgroud)
我试过这种方式,似乎它仍然不起作用,这真是太奇怪了!
<ContextMenu x:Name="menu" IsOpen="{Binding ElementName=wellControl, Path=IsInCompactMode}">
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,怎么了?"绑定ElementName = wellControl,Path = IsInCompactMode"适用于用户控件的其他部分,只是不适用于奇怪的上下文菜单?它没有成功
1> ContextMenu,Popups,DataGridColumns不是可视树的一部分.所以绑定使用ElementName或RelativeSource不会像那样工作.
2> 如果希望在特定情况下不显示上下文菜单,请使用触发器从视觉本身取消设置上下文菜单.
<TextBlock Text="ContextMenu is not shown when DataContext.IsShow is false"}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="ContextMenu"
Value="{StaticResource TextBlockContextMenu}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsShow}"
Value="False">
<Setter Property="ContextMenu"
Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
3>要将这些项附加到可视化树上,以便绑定起作用,我们使用代理元素方法...
我更喜欢第二步.
| 归档时间: |
|
| 查看次数: |
9741 次 |
| 最近记录: |