现在我有代码,用户可以在画布上单击它并放置一个黄色节点,然后会弹出一个窗口询问有关该节点的信息。我尝试制作它,以便用户必须首先从菜单上的两个选项中选择一个选项,然后他们就可以单击画布。我似乎无法解决这个问题,我确信它很简单。我有一个用于按下的MouseButtonEventArgs方法,但我无法将其绑定到RoutedeventArgs方法中以单击菜单选项。有小费吗?
所以基本上我想知道是否有一种方法可以实现它,所以除非首先选择RoutedEventArgs方法,否则不能使用MouseButtonEventArgs方法。 I.E.用户无法单击画布(addNode_MouseDown(对象发送者,MouseButtonEventArgs e),除非首先选择(单击)菜单选项(meunMethod_Here(对象发送者,RoutedEventArgs e)。
现在我的方法是添加节点:
private void addNode_MouseDown(object sender, MouseButtonEventArgs e)
{
Point currentPoint = new Point();
if (e.ButtonState == MouseButtonState.Pressed)
currentPoint = e.GetPosition(this);
Ellipse ellipse = new Ellipse();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 255, 255, 0);
ellipse.Fill = mySolidColorBrush;
ellipse.Width = 10;
ellipse.Height = 10;
Canvas.SetLeft(ellipse, e.GetPosition(canvas1).X);
Canvas.SetTop(ellipse, e.GetPosition(canvas1).Y);
canvas1.Children.Add(ellipse);
InputPopupWindow popup = new InputPopupWindow();
popup.ShowDialog();
}
XAML:
<Window x:Class="***.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="***" Height="410" Width="869">
<Grid Height="387">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_Browse File" Click="BrowseButton_Click" />
<MenuItem Header="_Add" >
<MenuItem Header="_Known Object" />
<MenuItem Header="_Waypoint" />
</MenuItem>
</Menu>
</DockPanel>
<Canvas Margin="0,21,0,7" x:Name="canvas1" MouseDown= "addNode_MouseDown" HorizontalAlignment="Left" Width="637"></Canvas>
<Grid Name="inputPopup" MouseDown="addNode_MouseDown" HorizontalAlignment="Right" Width="210" Margin="0,21,0,0">
<Grid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness="3" Grid.ColumnSpan="2">
<Grid Margin="0, 40, 0, 20" Background="White" Height="303">
</Grid>
</Border>
</Grid>
</Grid>
</Window>
答案 0 :(得分:0)
我创建了两个单独的方法来检查是否使用IsChecked选择了每个选项,并将每个选项订阅到其各自的方法。
示例:
<MenuItem Header="_Add" >
<MenuItem Header="_Known Object" x:Name="known_Object" IsCheckable="False" Click="addKnown_Object" />
代码背后:
private void addKnown_Object(object sender, RoutedEventArgs e)
{
known_Object.IsChecked = true;
}
然后,实际放置节点的方法首先检查相应选择的.IsChecked是否为真。
如果有更简单/更简单的方法,请告诉我!