我不显示上下文菜单,也不显示单个菜单或两个菜单。我正在使用MVVM模式。
我尝试将上下文菜单可见性链接到bool属性,这似乎起作用,但是在当前控件后面呈现了一个空的上下文菜单,一旦关闭当前控件,该菜单便变得可见。我尝试添加绑定到相同属性的数据触发器-但这不会被触发。检查视觉树表明,上下文菜单已设置为默认属性。
MenuItem可见性工作正常,因此我可以显示1或2个项目。但是,当不需要上下文菜单时,
后面会出现一个空白菜单。注意:隐藏或折叠可见性的结果相同
上下文菜单作为静态资源绑定到DataGrid:
RowStyle="{StaticResource PagedGridRowStyle}"
<ContextMenu x:Key="BlankMenu" Visibility="Hidden">
</ContextMenu>
<ContextMenu x:Key="PagedGridMenu"
Visibility="{Binding Path=DataContext.ContextMenuEnabled, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource VisConverter}}"
DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem Header="{Binding Path=DataContext.MenuActionName1, RelativeSource={RelativeSource AncestorType=UserControl}}"
Visibility="{Binding Path=DataContext.ContextMenuEnabled, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource VisConverter}}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext}"
Command="{Binding Path=DataContext.MenuActionCommand1, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
<MenuItem Header="{Binding Path=DataContext.MenuActionName2, RelativeSource={RelativeSource AncestorType=UserControl}}"
Visibility="{Binding Path=DataContext.ContextMenu2Enabled, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource VisConverter}}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext}"
Command="{Binding Path=DataContext.MenuActionCommand2, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
</ContextMenu>
<Style x:Key="PagedGridRowStyle"
TargetType="{x:Type DataGridRow}">
<Setter Property="ContextMenu"
Value="{StaticResource PagedGridMenu}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ContextMenuEnabled}" Value="false">
<Setter Property="ContextMenu" Value="{StaticResource BlankMenu}"/>
</DataTrigger>
</Style.Triggers>
</Style>
请注意,VisConverter只是切换可见性,可见性和可见性。折叠在布尔值上
Style.Triggers-以上: 这是尝试替换完整的上下文菜单的尝试-避免空白的上下文菜单在控件后面打开。 -但不会被解雇。
private bool _contextMenu2Enabled;
public bool ContextMenu2Enabled
{
get => _contextMenu2Enabled;
set
{
_contextMenu2Enabled = value;
OnPropertyChanged();
}
}
private bool _contextMenuEnabled;
public bool ContextMenuEnabled
{
get => _contextMenuEnabled;
set
{
_contextMenuEnabled = value;
OnPropertyChanged();
}
}
绑定错误:
当ContextMenuEnabled = false时:(和ContextMenu2Enabled = false)
System.Windows.Data Error: 40 : BindingExpression path error: 'ContextMenuEnabled' property not found on 'object' ''DataRowView' (HashCode=33440573)'. BindingExpression:Path=ContextMenuEnabled; DataItem='DataRowView' (HashCode=33440573); target element is 'DataGridRow' (Name=''); target property is 'NoTarget' (type 'Object')
没有显示“上下文”菜单,但是在数据网格后面显示了一个空的上下文菜单,并且在关闭数据网格后可以看到该菜单
当ContextMenuEnabled = true(并且ContextMenu2Enabled = false)时 相同的BindingExpression错误-但上下文菜单按预期显示单个项目。
当ContextMenuEnabled = true和ContextMenu2Enabled = true时 相同的BindingExpression错误--但是两个Context菜单项均按预期显示。
答案 0 :(得分:1)
您可以在设置器中将private static string CreateBaseString(string oauth_nonce, string oauth_timestamp, string status)
{
string baseFormat = "in_reply_to_status_id=1169662308278292480&oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}"
+ "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&status={6}";
string baseString = String.Format(baseFormat, oauth.OAuth_Consumer_Key, oauth_nonce, oauth.OAuth_Signature_Method,
oauth_timestamp, oauth.OAuth_Token, oauth.OAuth_Version, EncodingUtils.UrlEncode(status));
return String.Concat("POST&", EncodingUtils.UrlEncode(oauth.Resource_Url), "&", EncodingUtils.UrlEncode(baseString));
}
属性设置为ContextMenu
而不是显示空白的ContextMenu
:
null
如果在视图模型中定义了<Setter Property="ContextMenu" Value="{x:Null}"/>
属性,则应使用ContextMenuEnabled
绑定到它:
RelativeSource