C# 如何从c中的其他类访问MainWindow类工具#
我需要访问wpf中其他c#类(不仅仅是MainWindow类)的文本框和标签控件。 我使用了x:FieldModifier=“public”,但仍然是负数。 是否可以为其他类填充MainWindow类工具? 下面是我的简化示例代码:C# 如何从c中的其他类访问MainWindow类工具#,c#,wpf,C#,Wpf,我需要访问wpf中其他c#类(不仅仅是MainWindow类)的文本框和标签控件。 我使用了x:FieldModifier=“public”,但仍然是负数。 是否可以为其他类填充MainWindow类工具? 下面是我的简化示例代码: <Window x:Class="MyAbsClass.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://
<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>
您应该始终将此信息传递给类,这是关注点的分离,并确保在视图更改时不必更新其他类。这也意味着可以重用其他类 您也从WPF的错误方式遇到了这个问题-您不希望从TextBox获取值,而是希望TextBox设置值。您应该为此使用绑定 这是给你的一个工作样本,我很感激它不能直接回答你的问题,但我希望它能帮助你朝着正确的方向前进 视图:
您应该始终将此信息传递给类,这是关注点的分离,并确保在视图更改时不必更新其他类。这也意味着可以重用其他类 您也从WPF的错误方式遇到了这个问题-您不希望从TextBox获取值,而是希望TextBox设置值。您应该为此使用绑定 这是给你的一个工作样本,我很感激它不能直接回答你的问题,但我希望它能帮助你朝着正确的方向前进 视图:
通过传递对静态属性的引用,此方法应允许您访问任何窗口中的任何内容:
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));
}
}
更好更干净的解决方案
您可以简单地使用,然后传递整个窗口:
<StackPanel>
<TextBox Text="{Binding X}"/>
<TextBox Text="{Binding Y}"/>
<Button Content="Add" Click="Btn_Add"/>
</StackPanel>
设置您的窗口:
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());
}
}
通过传递对静态属性的引用,此方法应允许您访问任何窗口中的任何内容:
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));
}
}
更好更干净的解决方案
您可以简单地使用,然后传递整个窗口:
<StackPanel>
<TextBox Text="{Binding X}"/>
<TextBox Text="{Binding Y}"/>
<Button Content="Add" Click="Btn_Add"/>
</StackPanel>
设置您的窗口:
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());
}
}
虽然这段代码可能会解决问题,但它会从解释中受益。虽然这段代码可能会解决问题,但它会从解释中受益。
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());
}
}