2016-06-10 136 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)); 
    } 
}