我试图通过单击另一个窗口中的按钮来更改一个窗口中TextBox的Visibility属性。它不适用于我拥有的当前代码。使用同一类中的按钮和文本框很容易,但是在单独的类中则不起作用。这是具有要更改其他窗口的文本框的按钮的窗口的代码。
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 partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Window1 window1 = new Window1();
window1.Show();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Box.Visibility = Visibility.Visible;
}
}
}
答案 0 :(得分:0)
是的! 您可以为此使用Mediator类
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 MainWindow()
{
InitializeComponent();
_Mediator= Mediator.Instance;
_Mediator.Register("ButtonVisibility",ChangeButtonVisibility);
}
private void ChangeButtonVibility(object obj)
{
this.button.Visibility=Visibility.Hidden;
}
在其他窗口构造函数中的外观应该是这样
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模式中使用了Mediator类,但在这种情况下可以提供帮助。
答案 1 :(得分:0)
有可能
通过将文本框声明为静态变量(在代码中未在xaml文件中),可以在xaml文件中将其删除,但是您需要使用
X:Name =“选择名字_你想要”
然后从cs文件访问
就像这样
我希望x:name是示例,以便我的代码成为
公共静态文本块TB = new示例;
然后只需将TB.Visibility设置为false
就这样
从任何空中声明静态变量 课堂内的坚果
别忘了对结果进行注释