簡體   English   中英

如何從C#中的其他類訪問MainWindow類工具

[英]How to access MainWindow class tools from other classes in c#

我需要訪問wpf中其他c#類(不僅是MainWindow類)的文本框和標簽控件。 我使用x:FieldModifier =“ public”,但仍為負數。 是否可以為其他類填充MainWindow類工具? 這是我的簡化示例代碼:

<Window x:Class="MyAbsClass.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MyAbsClass"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox x:FieldModifier="public" x:Name="txt1"/>
    <TextBox x:FieldModifier="public" x:Name="txt2"/>
    <Button x:FieldModifier="public" x:Name="btn1" Content="Button" Click="btn1_Click"/>
</Grid>

namespace MyAbsClass
{   
class manipulate
{
    public void add()
    {
       int a=int32.Parse(txt1.Text);
       int b=int32.Parse(txt2.Text);
    }
}   

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();            
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
    MessageBox.Show("Added value= "+(a+b));
    }
}
}

您應該始終將此信息傳遞給類,這是關注點分離,並確保在視圖更改時您不必更新其他類。 這也意味着可以重用其他類。

WPF的錯誤方式也會導致此問題-您不想從TextBox中獲取值,而是希望TextBox設置值。 您應該為此使用綁定。

這是一個適合您的工作示例,我很欣賞它不能直接回答您的問題,但希望它能在正確的方向上為您提供幫助。

視圖:

<Window x:Class="WPFDynamicControls.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFDynamicControls"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" >
    <StackPanel>
        <TextBox Text="{Binding BoxA}"/>
        <TextBox Text="{Binding BoxB}"/>
        <Button Content="Add" Click="btn1_Click"/>
    </StackPanel>
</Window>

后面的代碼:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.DataContext = this;
        InitializeComponent();
    }

    public int BoxA { get; set; }

    public int BoxB { get; set; }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Added value= " + Manipulate.Add(this.BoxA, this.BoxB));
    }
}

public static class Manipulate
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}
var mainWindow = new MainWindow();
int a = int32.Parse(mainWindow.txt1.Text);
int b = int32.Parse(mainWindow.txt2.Text);

通過將引用傳遞給靜態屬性,此方法應使您可以訪問任何窗口中的任何內容:

public partial class MainWindow : Window
{
    public static TextBox txt1Mirror;
    public static TextBox txt2Mirror;

    public MainWindow()
    {
        InitializeComponent();
        txt1Mirror = txt1;
        txt1Mirror = txt2;
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        Manipulate.Add();
    }
}

public static class Manipulate
{
    public static void Add()
    {
       int a = int32.Parse(MainWindow.txt1Mirror.Text);
       int b = int32.Parse(MainWindow.txt2Mirror.Text);

       MessageBox.Show("Added value= " + (a + b));
    }
}

更好更清潔的解決方案

您可以簡單地將BindingInterface 結合使用,然后傳遞整個窗口:

<StackPanel>
    <TextBox Text="{Binding X}"/>
    <TextBox Text="{Binding Y}"/>
    <Button Content="Add" Click="Btn_Add"/>
</StackPanel>

實施接口:

interface IManipulate
{
   int X { get; set; }
   int Y { get; set; }
}

設置窗口:

public partial class MainWindow : Window, IManipulate
{
    public int X { get; set; }
    public int Y { get; set; }

    public MainWindow()
    {
        InitializeComponent();
    }

    private void btn_Add(object sender, RoutedEventArgs e)
    {
        Manipulate.Add(this);
    }
}

public static class Manipulate
{
    public static void Add(IManipulate e)
    {
       MessageBox.Show("Added value= " + (e.X + e.Y).toString());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM