gpt4 book ai didi

c# - 如何从后面的代码访问在 xaml 中声明的全局变量

转载 作者:行者123 更新时间:2023-11-30 22:19:05 25 4
gpt4 key购买 nike

我想从 wpf 中的不同导航页面访问一个对象。为此,我创建了一个类并在 app.xaml 中声明。我可以从 xaml 中的多个导航页面访问该类,但是当我想在代码隐藏中创建按钮单击事件时,我无法访问该类。

这是我做的。

类(SerialComm.cs)。

class SerialComm : INotifyPropertyChanged
{
private SerialPort _serialPortComm;

public SerialComm()
{
_serialPortComm = new SerialPort();
}

public SerialPort SerialPortComm
{
get { return _serialPortComm; }
set
{
_serialPortComm = value;
OnPropertyChanged("SerialPortComm");
}
}

#region NotifyPropertyChange handler
public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion

}

资源字典(/Resources/DataSourceResources.xaml)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:RemoteConfigurator"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
>
<local:SerialComm x:Key="SerialCommDataSource" d:IsDataSource="True" />

app.xaml 中的声明

<Application x:Class="RemoteConfigurator.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:RemoteConfigurator"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/DataSourceResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

我可以访问对象的导航页面。

<UserControl x:Class="RemoteConfigurator.Content.SerialSettings"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ports="clr-namespace:System.IO.Ports;assembly=System"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:RemoteConfigurator"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="600" Loaded="SerialSettings_Loaded">

<Grid Style="{StaticResource ContentRoot}" DataContext="{Binding Source={StaticResource SerialCommDataSource}}" >
<ScrollViewer>
<StackPanel >
<StackPanel Orientation="Horizontal" Margin="4">
<TextBlock TextWrapping="Wrap" Text="Baud Rate (bps)" VerticalAlignment="Center" MinWidth="150"/>
<TextBox x:Name="tbbaudRate" Height="23" TextWrapping="Wrap" MinWidth="200" Text="{Binding SerialPortComm.BaudRate}" />
</StackPanel>
</StackPanel>
</ScrollViewer>
**<Button Content="Connect" HorizontalAlignment="Right" VerticalAlignment="Bottom" Click="Button_Connect"/>**
</Grid>

我的问题是如何从后面的代码访问 SerialPort?实际声明的类在哪里。 iirc,我从不调用任何串行端口构造函数。

这是背后的代码。

        private void Button_Connect(object sender, RoutedEventArgs e)
{
**//SerialPortComm - doesnt work**
**//SerialCommDataSource - doest work**
}

我如何从后台代码访问串口对象?

谢谢。

最佳答案

你可以做到

App.Current.Resources["SerialCommDataSource"] as SerialCom;

基本上,因为您已经添加了一个全局资源,键为 SerialCommDataSource,您可以像上面那样获取它

关于c# - 如何从后面的代码访问在 xaml 中声明的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com