【问题标题】:Input dialogue popup on mouse click鼠标点击时弹出输入对话框
【发布时间】:2014-11-25 09:32:16
【问题描述】:

我正在努力做到这一点,当用户单击画布中的某个位置时,会显示一个弹出窗口,允许用户输入两个单独的数据。所以我需要两个文本块,然后将输入的数据保存到后面代码中的一些变量中。我一直在看不同的教程,用输入 texblocks 制作一个窗口很容易。只是不知道如何使用弹出窗口来做到这一点。 addNode_MouseDown 方法是我尝试添加弹出窗口的地方,因为输入的信息将与用户单击画布时所画的圆圈有关。任何帮助将不胜感激。

这是我目前的代码:

XAML:

<Window x:Class="CanvasStuff.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Main Window" Height="410" Width="869">
 <Grid Height="387">
    <Label Content="Image" Height="32" HorizontalAlignment="Left" Margin="11,10,0,0"
           Name="selectedFileName" VerticalAlignment="Top" Width="137"
           Background="LightGray" BorderBrush="Gray" BorderThickness="1"/>
    <Button Content="Browse File" Height="34" HorizontalAlignment="Left" Margin="154,6,0,0"
            Name="BrowseButton" VerticalAlignment="Top" Width="119"
            Foreground="Maroon" FontSize="16" FontFamily="Georgia" Click="BrowseButton_Click" />
    <Button Content="Input Range and Heading" Height="34" HorizontalAlignment="Left" Margin="279,6,0,0"
            Name="InputRangeBearing" VerticalAlignment="Top" Width="191"
            Foreground="Maroon" FontSize="16" FontFamily="Georgia" Click="InputButton_Click" />
    <Canvas Margin="0,45,2,8" x:Name="canvas1" MouseDown= "addNode_MouseDown">
    </Canvas>
 </Grid>
</Window>

后面的代码:

namespace CanvasStuff
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.InitialDirectory = "c:\\";
            dlg.Filter = "Image files (*.jpg)|*.jpg|All Files (*.*)|*.*";
            dlg.RestoreDirectory = true;

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string selectedFileName = dlg.FileName;
                ImageBrush brush = new ImageBrush();
                brush.ImageSource = new BitmapImage(new Uri(selectedFileName));
                canvas1.Background = brush;
                BitmapImage bitmap = new BitmapImage();
            }

        }

        private void InputButton_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Please click on known object to enter range and heading of that     object.");
        }

        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);

        } 

    }
}

【问题讨论】:

    标签: c# wpf xaml user-input


    【解决方案1】:

    您尝试过使用PopUp 窗口吗?

    XAML:

    <Popup Name="errMsg" StaysOpen="False">
    <TextBox/>
    </Popup>
    

    在你的代码后面:

    errMsg.IsOpen = true;
    

    或者您可以完全使用您的代码创建:

    WPF popup window

    参考:

    Popup a User Control

    【讨论】:

    • 感谢您的回复。我查看了 PopUp,但我发现人们说使用它来获取输入并不是一个好习惯,只是为了显示一些文本。不过我会试试看。
    • 好的,我可以使用弹出窗口获取一个输入,但不能获取两个,因为“只能有一个孩子”错误。例如,我可以有一个输入文本框,但旁边不能有标签。我需要能够显示两个标签,然后在它们旁边的两个文本框进行输入。我尝试了一个新窗口,但还是一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2014-06-23
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多