【问题标题】:Enable MouseButtonEventArgs from RoutedEventArgs从 RoutedEventArgs 启用 MouseButtonEventArgs
【发布时间】:2014-12-10 15:47:24
【问题描述】:

现在我有代码,用户可以在画布上单击并放置一个黄色节点,然后会弹出一个窗口询问有关该节点的信息。我正在尝试做到这一点,因此用户必须首先从菜单上的两个选项中选择一个选项,然后他们才能单击画布。我似乎无法弄清楚这一点,我相信这很简单。我有一个用于按下的 MouseButtonEventArgs 方法,但我无法将它与用于单击菜单选项的 RoutedeventArgs 方法联系起来。有小费吗?

所以基本上我想知道是否有办法使它不能使用 MouseButtonEventArgs 方法,除非首先选择 RoutedEventArgs 方法。 IE。用户不能点击画布(addNode_MouseDown(object sender, MouseButtonEventArgs e),除非先选择(点击)菜单选项(meunMethod_Here(object sender, 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>

【问题讨论】:

  • 尽量说明您的问题与更多的人有关,而不仅仅是您。如果不是,请删除它。
  • 好吧,我编辑了它。

标签: c# wpf xaml mouseevent


【解决方案1】:

我创建了两个单独的方法来检查是否使用 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 是否为真。

如果有更简单/更简单的方法可以做到这一点,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2021-05-24
    • 2020-03-06
    相关资源
    最近更新 更多