C# 是否可以通过单击另一个类(另一个wpf窗口)中的按钮来更改文本框的可见性属性?
我试图通过单击另一个窗口中的按钮来更改一个窗口中文本框的可见性属性。它与我当前的代码不兼容。在同一个类中使用按钮和文本框很容易,但在不同的类中则不起作用。这是一个窗口的代码,该窗口有一个我想按下的按钮来更改另一个窗口的文本框C# 是否可以通过单击另一个类(另一个wpf窗口)中的按钮来更改文本框的可见性属性?,c#,wpf,C#,Wpf,我试图通过单击另一个窗口中的按钮来更改一个窗口中文本框的可见性属性。它与我当前的代码不兼容。在同一个类中使用按钮和文本框很容易,但在不同的类中则不起作用。这是一个窗口的代码,该窗口有一个我想按下的按钮来更改另一个窗口的文本框 public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Button2_Click(o
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
MainWindow mainWindow = new MainWindow();
mainWindow.Box.Visibility = Visibility.Visible;
}
}
}
这是我要更改其文本框的窗口的代码
<Grid Background="Blue">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBox Name="Box" Text="" Visibility="Hidden"/>
<Button Name="Buttons" Grid.Column="1" Content="Button" Click="Button_Click"/>
</Grid>
}是的!
您可以为此使用中介类
public class Mediator
{
static readonly Mediator instance = new Mediator();
public static Mediator Instance
{
get
{
return instance;
}
}
private Mediator()
{
}
private static Dictionary<string, Action<object>> subscribers = new Dictionary<string, Action<object>>();
public void Register(string message, Action<object> action)
{
subscribers.Add(message, action);
}
public void Notify(string message, Object param)
{
foreach (var item in subscribers)
{
if (item.Key.Equals(message))
{
Action<object> method = (Action<object>)item.Value;
method.Invoke(param);
}
}
}
}
在另一个窗口中,构造函数应该如下所示
Mediator _Mediator;
public MainWindow1(Mediator _mediator)
{
InitializeComponent();
_Mediator=_mediator;
}
//ON button click u notify like this
private void button_click(object sender, RoutedEventArgs e)
{
_Mediator.Notify("ButtonVisibility",null)
}
从主窗口初始化子窗口时
MainWindow1 window1= new MainWindow(_Mediator);
注意:在MVVM模式中使用了中介类,但在这种情况下它可以提供帮助。这是可能的
通过将textbox声明为静态变量(在代码中而不是在xaml文件中),可以在xaml文件中对其进行增量,但需要使用
X:Name=“选择您想要的名称”
然后从cs文件中访问它
就这样做吧
我希望x:name是exmpl,因此我的代码将是
公共静态文本块TB=新的exmpl
然后只需编辑TB。可见性为false
就这样
从任何void中声明静态变量
班里的螺帽
不要忘记注释结果使用mvvm,而不是代码隐藏。通过绑定并将布尔值设置为视图模型的属性,您可以很容易地做到这一点。使用datacontext属性传递datacontext并将内容绑定到此上下文。但我真的很想知道你是否真的想要一个可以改变页面的应用,比如设置页面。我可以向你展示这个问题的解决方案,但伙计,你走错了路。@JohniMichels我很想学习MVVM,但所有关于它的在线信息对我来说都毫无意义,所以我希望坚持我所知道的。你知道MVVM在线版有什么好的参考资料吗?给你。从小型应用程序开始,保留这些设计模式,这将为您节省很多麻烦。@JohniMichels好的,谢谢!
Mediator _Mediator;
public MainWindow1(Mediator _mediator)
{
InitializeComponent();
_Mediator=_mediator;
}
//ON button click u notify like this
private void button_click(object sender, RoutedEventArgs e)
{
_Mediator.Notify("ButtonVisibility",null)
}
MainWindow1 window1= new MainWindow(_Mediator);