【问题标题】:Adding a Control per Mouse Click in Run Time在运行时每次鼠标点击添加一个控件
【发布时间】:2015-08-05 05:58:55
【问题描述】:
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {

        Button button1 = new Button();
        Point tPosition = Mouse.GetPosition(this);
        button1.Margin = new Thickness(tPosition.X,tPosition.Y,0,0) ;
        button1.Width = 75;
        this.AddChild(button1);
    }
}

我认为代码是不言自明的,我在stackoverflow中使用了其他线程中批准的代码,它没有给出任何错误,但也没有显示,我需要刷新窗户?怎么做?

根据请求,XAML

<Window x:Class="Ampeldingensthingy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown" Name="hans">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="398*" />
            <ColumnDefinition Width="105*" />
        </Grid.ColumnDefinitions>
    </Grid>
</Window>

【问题讨论】:

  • 我认为你需要有一个像 stackPanel 或 grid 这样的容器来添加子元素。

标签: wpf runtime controls mouse


【解决方案1】:

Window 只能有一个孩子,我想你已经有一个是 Grid,它的 MouseButtonDown 是你订阅的。为该网格命名,然后替换

this.AddChild(button1);

grid.Children.Add(button1);

这里的 grid 是 Grid 的名称。

【讨论】:

    【解决方案2】:

    对象“this”在这里描述了 Window 对象。 ContentControl 的内容必须是单个元素。因此,将“button1”按钮附加到父网格中。例如

    private void Button_Click(object sender, RoutedEventArgs e)
            {
                Button button1 = new Button();
                Point tPosition = Mouse.GetPosition(this);
                button1.Margin = new Thickness(tPosition.X, tPosition.Y, 0, 0);
                button1.Width = 75;
                MainGrid.Children.Add(button1);
            }
    

    在你的 Xaml 中

    <Grid x:Name="MainGrid">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
    
            <Button Click="Button_Click" Content="click" Grid.Row="1"/>
    
        </Grid>
    

    【讨论】:

      【解决方案3】:
          public partial class MainWindow : Window
          {
              public StackPanel SPanel{get;set;}
              public MainWindow()
              {
                  InitializeComponent();
                  SPanel = new StackPanel { Orientation = Orientation.Vertical };
              }
      
              private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
              {              
      
                  Button button1 = new Button();
                  Point tPosition = Mouse.GetPosition(this);
                  button1.Margin = new Thickness(tPosition.X,tPosition.Y,0,0) ;
                  button1.Width = 75;
                  SPanel.Children.Add(button1);
                  window.Content = SPanel;
              }
          }
      

      尝试对画布做同样的事情。按钮将在您指定的位置弹出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-13
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多