我有一個畫布,當用戶右鍵單擊它時,會出現一個上下文菜單。我也有一個複選框,當選中該框時,我不想顯示上下文菜單。原因在於,當複選框被選中時,用戶的前兩次右擊將在右鍵點擊兩個點時丟棄省略號。現在,上下文菜單將彈出這兩個右鍵單擊。這裏是相對碼:禁止在畫布上右鍵單擊上下文菜單
<Window x:Class="Testproj.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Testproj"
xmlns:localConverters="clr-namespace:Testproj"
x:Name="this"
Height="650" Width="1091"
Loaded="this_Loaded"
Closing="this_Closing">
<Window.Resources>
<local:BoolToVisibilityConverter x:Key="converter"/>
</Window.Resources>
<Grid Height="Auto">
<Grid.Resources>
<local:NullToVisibilityConverter x:Key="nullToVisibilityConverter" />
</Grid.Resources>
<Grid VerticalAlignment="Top">
<DockPanel>
<CheckBox x:Name="scaleBox" Content="Scale" IsChecked="False" Checked="scaleischecked"/>
</Menu>
</DockPanel>
</Grid>
<Viewbox Margin="0,23,0,157" x:Name="viewbox1" ClipToBounds="True">
<Canvas Margin="0,21,0,12" x:Name="canvas1" ClipToBounds="True" RenderOptions.BitmapScalingMode="HighQuality" MouseWheel="Canvas_Zoom" MouseRightButtonDown="get_MousePosition" HorizontalAlignment="Left" Width="3138" Height="1260">
<Canvas.RenderTransform>
<MatrixTransform x:Name="mt"/>
</Canvas.RenderTransform>
<Canvas.ContextMenu>
<ContextMenu Name="nodeContextMenu" Visibility="{StaticResource converter}" >
<MenuItem x:Name="test1" IsCheckable="False" Header="test1" Click="WaypointMenuItem_Click" >
</MenuItem>
<MenuItem x:Name="test2" IsCheckable="False" Header="test2" Click="KnownObjectMenuItem_Click" >
</MenuItem>
</ContextMenu>
</Canvas.ContextMenu>
</Canvas>
</Viewbox>
</Grid>
</Window>
後面的代碼中右鍵單擊畫布:
private void get_MousePosition(object sender, MouseButtonEventArgs e)
{
if (scaleBox.IsChecked == true)
{
get_points(sender, e);
}
}
我一直試圖與上下文菜單的IsOpen屬性亂搞,但它無論其設置爲true還是false,都可以右鍵單擊打開。
嘗試下面的轉換器。如果這是正確的,那麼使用這個綁定複選框和上下文菜單的正確方法是什麼?
namespace Testproj
{
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility visibility = Visibility.Collapsed;
if (value != null)
{
visibility = (bool)value ? Visibility.Collapsed : Visibility.Visible;
}
return visibility;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
不太確定轉換器是如何工作的,但我明白你的意思。有沒有其他的方式來綁定複選框的上下文菜單?我以前從未使用過轉換器。 – pfinferno 2015-04-01 13:17:31
你需要學習。否則,如果您不利用XAML模式,您會像XAML開發人員一樣掙扎。 – 2015-04-01 13:27:07
將嘗試編輯我的答案。你能否告訴我,如果這是正確的方式? – pfinferno 2015-04-01 13:35:16