C# WPF中的弹出窗口未打开

C# WPF中的弹出窗口未打开,c#,wpf,C#,Wpf,我有一个修改了列标题的datagrid,其中包含一个按钮,可以打开一个弹出窗口。 这是以代码隐藏方式编写的,因为不同的数据源具有不同的列数 这就是它看起来的样子: 弹出窗口存储在: Dictionary<string, Popup> HeaderPopups = new Dictionary<string, Popup>(); 因此,对于每一列,都会生成一个弹出窗口,我的HeaderPopups字典中有带有键Spec_No、Grade和Class的弹出窗口 我希望相应的

我有一个修改了列标题的datagrid,其中包含一个按钮,可以打开一个弹出窗口。 这是以代码隐藏方式编写的,因为不同的数据源具有不同的列数

这就是它看起来的样子:

弹出窗口存储在:

Dictionary<string, Popup> HeaderPopups = new Dictionary<string, Popup>();
因此,对于每一列,都会生成一个弹出窗口,我的HeaderPopups字典中有带有键Spec_No、Grade和Class的弹出窗口

我希望相应的弹出窗口显示在单击的按钮下方,如中的示例所示

看这里:

我的问题是在HeaderFilterButtonClick事件中打开这些弹出窗口。我试了一下:

private void HeaderFilterButtonClick(object sender, RoutedEventArgs e)
{
    Button b = sender as Button;
    txtTest.Text += e.OriginalSource.ToString() + Environment.NewLine;
    txtTest.Text += e.Source.ToString() + Environment.NewLine;
    txtTest.Text += b.Name;

    if (b.Name == "btn_Spec_No")
    {
        HeaderPopups["Spec_No"].IsOpen = true;
    }
}
但它不起作用

有人能帮忙吗?

您的弹出窗口当前为空,因此完全不可见

应将其子属性设置为边框,并将边框的子属性设置为要渲染的内容:

Popup pop = new Popup() { ... };
Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 1, 1, 1) };
bord.Child = new TextBlock() { Text = "some content..." };
pop.Child = bord;
您的弹出窗口当前为空,因此完全不可见

应将其子属性设置为边框,并将边框的子属性设置为要渲染的内容:

Popup pop = new Popup() { ... };
Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1, 1, 1, 1) };
bord.Child = new TextBlock() { Text = "some content..." };
pop.Child = bord;

弹出窗口正在打开和渲染,但它是空的,因此无法看到

问题就在这里

 Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1,1,1,1) };
 pop.DataContext = bord;
Datacontext用于设置绑定目标,空弹出窗口没有绑定

您需要通过将上面的更改为来填充子对象

 Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1,1,1,1) };
pop.Child = bord;
这会将弹出式容器的根设置为另一个Border对象。 您还必须对堆栈面板和边框执行相同的操作

StackPanel stack = new StackPanel() { Margin = new Thickness(5, 5, 5, 15) };
bord.Child = stack;

弹出窗口正在打开和渲染,但它是空的,因此无法看到

问题就在这里

 Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1,1,1,1) };
 pop.DataContext = bord;
Datacontext用于设置绑定目标,空弹出窗口没有绑定

您需要通过将上面的更改为来填充子对象

 Border bord = new Border() { Background = Brushes.White, BorderBrush = Brushes.Gray, BorderThickness = new Thickness(1,1,1,1) };
pop.Child = bord;
这会将弹出式容器的根设置为另一个Border对象。 您还必须对堆栈面板和边框执行相同的操作

StackPanel stack = new StackPanel() { Margin = new Thickness(5, 5, 5, 15) };
bord.Child = stack;

您将在事件处理程序中创建的弹出窗口存储在何处。。。?你希望在哪里找到它?谢谢你的回答,谢谢你愚蠢的问题。刚刚编辑了标题和正文。现在我在弹出窗口中使用了字典,但新的问题是,它们没有打开:/Where do you want it show up?(您希望它显示在哪里?)在单击的按钮下,请参见编辑的帖子您误用了DataContext。当您想要分配Childcontrols时,通常使用Content或Children在事件处理程序中创建的弹出窗口存储在哪里。。。?你希望在哪里找到它?谢谢你的回答,谢谢你愚蠢的问题。刚刚编辑了标题和正文。现在我在弹出窗口中使用了字典,但新的问题是,它们没有打开:/Where do you want it show up?(您希望它显示在哪里?)在单击的按钮下,请参见编辑的帖子您误用了DataContext。当您想要分配子控件时,通常使用内容或子控件