C# 如何在单击按钮时创建新面板?
我的WPF应用程序接口需要一些真正不同的东西。实际上,我的应用程序中有动态按钮。现在我想,当我点击按钮,它的面板应该创建并打开,以添加一些东西在它的文本框保存在数据库中!同样的,Format TextBox应该随着打开的面板更新,因为下面的这张图片显示了你们所有人 如何区分面板和文本框以将文本保存在数据库中的文本框中? 编辑:C# 如何在单击按钮时创建新面板?,c#,.net,wpf,C#,.net,Wpf,我的WPF应用程序接口需要一些真正不同的东西。实际上,我的应用程序中有动态按钮。现在我想,当我点击按钮,它的面板应该创建并打开,以添加一些东西在它的文本框保存在数据库中!同样的,Format TextBox应该随着打开的面板更新,因为下面的这张图片显示了你们所有人 如何区分面板和文本框以将文本保存在数据库中的文本框中? 编辑: 我没有使用MVVM 我希望您只是要求提供解决该问题的一般方法,因为我不想费心编写所有这些东西。 下面是: 为面板创建用户控件。因为它们都是相同的,所以使用属性来存储为哪
我没有使用MVVM 我希望您只是要求提供解决该问题的一般方法,因为我不想费心编写所有这些东西。
下面是:
1.正如我所说,创建一个用户控件,它将成为您的面板。通过这种方式,您可以在按钮单击事件的代码(xaml.cs文件)中实例化它,就像实例化任何其他类的对象一样。
2.当您创建面板用户控件时,让我们将其称为
MyPanel
,在代码后面添加一个属性,并可以随意调用它(ParentButton
)。现在,您可以添加一个将按钮ID作为参数的构造函数,或者只需使用标准构造函数,然后在将面板添加到集合之前将按钮ID分配给该属性
--编辑--这里是一个链接。在那里,您可以找到一种快速简单的方法,将集合附加到列表并处理更改。
在INotifyPropertyChanged上,您将在面板中实现该接口(可能)
关于可观察到的集合。
关于如何将数据绑定到列表等
现在请记住:他们在教程中使用简单对象,但您也可以以同样的方式使用用户控件。
再说一次,这是很多阅读,但你必须自己做。。。祝你好运:) --编辑--
实际上,您甚至不必创建用户控件,只需创建一个包含您想要保存的数据的对象,如下所示:
class MyPanel: INotifyPropertyChanged
{
private string _id;
private string _text;
public string Id
{
get { return _id; }
set
{
if (value != _id)
{
_id = value;
NotifyPropertyChanged();
}
}
}
public string Text
{
get { return _text; }
set
{
if (value != _text)
{
_text= value;
NotifyPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后在应用程序窗口中添加一个控件,您希望在其中显示面板:
<ItemsControl Name="lstPanels" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel orientation="vertical">
<TextBlock Text="{Binding Id}">
<TextBox Text="{Binding Text, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
然后添加一个函数以添加新面板:
private void addPanel(string buttonId)
{
MyPanel p = new MyPanel { Id = buttonId; };
panels.add(p);
}
然后在按钮1/button2/button3上单击使用适当id调用该函数:
addPanel("button1");
addPanel("button2");
当您要完成并循环面板时,请使用标准foreach或在
面板上进行循环(
:)@DaveRook是否要上载另一个以使文本可见?@DaveRook请立即检查:)这是WPF。我没有选择WinForm我没有使用MVVM…为什么?我没有使用MVVM就制作了一个非常简单的应用程序。很少有部分正在进行中。所以现在很难转到MVVM@Shoe:)谢谢!:)是的,我还有两个问题如何通过编程或设计生成面板其次如何为面板分配ID
?:)好的,我的理解是:我创建了一个包含面板布局的UserControl。现在,当我点击按钮时,它的EventHandler将把它的id传递给ObservableCollection,并在其中添加具有相同id的面板。
我说得对吗,先生?谢谢你让我开始这个,如果我有,我可以在评论中发布查询吗?检查我为你发布的代码示例…哦,谢谢,太多了:)。。。保持幸福:)
private void addPanel(string buttonId)
{
MyPanel p = new MyPanel { Id = buttonId; };
panels.add(p);
}
addPanel("button1");
addPanel("button2");