2016-06-10 137 views
0

我需要访问wpf中的其他c#类(不仅是MainWindow类)的文本框和标签控件。 我使用了x:FieldModifier =“public”,但仍然是负值。 是否有可能为其他类填充MainWindow类Tools? 这里是我的简单示例代码:如何从c#中的其他类访问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)); 
    } 
} 
} 

回答

0
var mainWindow = new MainWindow(); 
int a = int32.Parse(mainWindow.txt1.Text); 
int b = int32.Parse(mainWindow.txt2.Text); 
+0

尽管这段代码可能会解决这个问题,它从一个解释。 – BDL

2

你应该总是通过这个信息类,这是关注点分离,并确保当视图改变你不”不得不更新你的其他课程。这也意味着其他类可以重用。

你也从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; 
    } 
} 
0

如果你想要的仅仅是访问类检索的东西,而不是实际操纵它或改变它,那么你可以简单地创建一个镜像对象你想要它的值如下:

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

    public MainWindow() 
    { 
     InitializeComponent(); 
     txt1Mirror = txt1; 
     txt2Mirror = 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); 
    } 
    public static void Add() 
    { 
     MessageBox.Show("Added value= " + (a + b)); 
    } 
}