原理是点击按钮时新增一个全屏半透明控件挡住主窗体。
代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
Grid a = new Grid();
a.Height = w1.Height;
a.Width = w1.Width;
a.Background = new SolidColorBrush(Color.FromArgb(127,0,0,0));
//a.Opacity = 0.6;//如果这里设置透明度,那么Grid下的子控件也会透明
a.VerticalAlignment = VerticalAlignment.Center;
c1.Children.Add(a);//<Canvas Name="c1">
c1.RegisterName("jz", a);
StackPanel a2 = new StackPanel();
a2.Height = 200;
a2.Width = 80;
a.Children.Add(a2);
Label x2 = new Label();
x2.Height = 50;
x2.Width = 80;
x2.Background = new SolidColorBrush(Colors.Pink);
x2.Content = "1";
a2.Children.Add(x2);
Button x = new Button();
x.Height = 50;
x.Width = 80;
x.Content = "123";
x.Click += new RoutedEventHandler(x_Click);
a2.Children.Add(x);
Keyboard.Focus(x);//焦点放到上面
}
void x_Click(object sender, RoutedEventArgs e)
{
Grid a = c1.FindName("jz") as Grid;
if (a != null)//判断是否找到
{
c1.Children.Remove(a);//移除对应按钮控件
c1.UnregisterName("jz");//还需要把对用的名字注销掉,否则再次点击Button_Add会报错
}
}
问题1:调试时发现使用Opacity设置透明度后发现所有添加的控件都变半透明了
改用a.Background = new SolidColorBrush(Color.FromArgb(127,0,0,0));
问题2:发现焦点用tab键还是可以切换到后面的主窗体里,暂时没什么好方法解决。