Muszę utworzyć menu kontekstowe dla elementu menu. Widoczność menu kontekstowego jest powiązana z ViewModel.
Gdy właściwość zmieni się na true, za pomocą MVVMJasne, menu kontekstowe pojawia się w interfejsie użytkownika, nawet jeśli element menu nie jest kliknięty prawym przyciskiem myszy. Co mogę zrobić, aby ukryć menu kontekstowe, gdy wartość jest fałszywa, i pozwolić, aby była widoczna tylko po kliknięciu prawym przyciskiem myszy?
private Boolean _IsEditable;
public Boolean IsEditable
{
get { return _IsEditable; }
set
{
if (_IsEditable == value) return;
_IsEditable = value;
RaisePropertyChanged("IsEditable");
}
}
<Menu DockPanel.Dock="Top">
<MenuItem Header="{Binding Menu.Business}" Visibility="{Binding allowUI, Converter={StaticResource BoolToVisConverter} }">
<MenuItem.ContextMenu>
<ContextMenu Visibility="{Binding Menu.IsEditable, Converter={StaticResource BoolToVisConverter} }">
<MenuItem>
<MenuItem.Header>
<TextBox Text="{Binding Menu.Business, UpdateSourceTrigger=PropertyChanged}" LostFocus="end_change_UI" />
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</MenuItem.ContextMenu>
</MenuItem>
</Menu>
Odpowiedzi:
0 dla odpowiedzi № 1Możesz zastosować a Style
do MenuItem
który tylko ustawia ContextMenu
właściwość, gdy IsEditable
Właściwość source jest ustawiona na true
:
<Menu DockPanel.Dock="Top">
<MenuItem Header="{Binding Menu.Business}" Visibility="{Binding allowUI, Converter={StaticResource BoolToVisConverter} }">
<MenuItem.Style>
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Menu.IsEditable}" Value="True">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem>
<MenuItem.Header>
<TextBox Text="{Binding Menu.Business, UpdateSourceTrigger=PropertyChanged}" LostFocus="end_change_UI" />
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
</Menu>