可以通过在另一个类(另一个wpf窗口)中单击按钮来更改TextBox的Visibility属性吗?

时间:2018-08-19 20:07:47

标签: c# wpf

我试图通过单击另一个窗口中的按钮来更改一个窗口中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;
    }
}

}

2 个答案:

答案 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

就这样

从任何空中声明静态变量 课堂内的坚果

别忘了对结果进行注释