WPF访问本身
本文关键字:访问 WPF | 更新日期: 2023-09-27 17:57:42
这是我加入WPF的第一天。享乐
我目前有一个WPF应用程序,它打开/返回一个带有OpenFileDialog
的文件。我有一个现有的脚本,它已经解构并提取了这些数据。我需要的是能够访问该数据(我想将其绑定到)并将其显示在XAML中的元素中。我一直想不出该怎么做。
这就是我的设置。
主窗口.xaml.cs:
namespace GridView
{
public partial class MainWindow
{
private GridSet<byte> _grids;
public MainWindow()
{
InitializeComponent();
}
private void Open_OnClick(object sender, RoutedEventArgs e)
{
var openDialog = new OpenFileDialog();
if (openDialog.ShowDialog().Value)
{
//Populate _grids with data
}
}
}
}
主窗口.xaml:
<Window 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"
mc:Ignorable="d" x:Class="GridView.MainWindow"
Title="Grid View" Width="800" Height="600" WindowStartupLocation="CenterScreen">
<DockPanel>
...
"Open_OnClick" here
...
<TextBox/>
</DockPanel>
</Window>
正如您所看到的,.cs文件只是MainWindow
的交互逻辑。那么,为什么我不能弄清楚如何配置我的TextBox以在_grids
中显示数据呢?
我摆弄了x:Name
、x:Reference
、Window.Resources
、DataContext
、Binding
等等,但我还没有找到适用于此的指南。这可能是因为我仍然不了解WPF的方方面面。但我在这里做错了什么?
(或者,我会对WPF教程感到满意,它不会让我的大脑从耳朵里渗出。)
您已经在C#中声明了_grids
,但它没有添加到可视化树中。
最简单的方法是在XAML中声明对象(尽管我不能100%确定GridSet
是什么——我找不到任何关于它的文档)。所以,如果它是一个简单的Grid
,你会有:
<DockPanel>
<Grid x:Name="MyGrid" />
</DockPanel>
通过命名它,您可以在代码中访问它:
MyGrid.Children.Add(something);
若要使用绑定,必须设置窗口的DataContext
。最简单的方法是:
this.DataContext = this;
在你的构造函数中。
您想使用按钮吗?
XAML:
<Window 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"
mc:Ignorable="d" x:Class="GridView.MainWindow"
Title="Grid View" Width="800" Height="600" WindowStartupLocation="CenterScreen">
<DockPanel>
<Grid>
<Button x:Name="Open" Click="Open_OnClick" />
<TextBox x:Name="tbDisplay"/>
</Grid>
</DockPanel>
</Window>
C#
namespace GridView
{
public partial class MainWindow
{
private GridSet<byte> _grids;
public MainWindow()
{
InitializeComponent();
}
private void Open_OnClick(object sender, RoutedEventArgs e)
{
var openDialog = new OpenFileDialog();
if (openDialog.ShowDialog().Value)
{
//Populate _grids with data
tbDisplay.Text = "foo";
}
}
}
}