在 WPF (Windows Presentation Foundation) 中,可以创建一个简单的三色灯控件,包含红、黄、绿三种颜色。当信号传来时相应的颜色会亮起。以下是实现这个控件的基本步骤和示例代码。
如图效果:
- 创建三色灯控件
首先,您可以创建一个新的UserControl
,定义其外观和行为:
<UserControl x:Class="YourNamespace.TrafficLightControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="100" Height="300">
<StackPanel>
<Ellipse Name="RedLight" Fill="Gray" Width="80" Height="80" Margin="10"/>
<Ellipse Name="YellowLight" Fill="Gray" Width="80" Height="80" Margin="10"/>
<Ellipse Name="GreenLight" Fill="Gray" Width="80" Height="80" Margin="10"/>
</StackPanel>
</UserControl>
- 代码后端
然后,在代码后端TrafficLightControl.xaml.cs
中,定义一个方法来根据传递的信号亮起灯。
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace YourNamespace
{
public partial class TrafficLightControl : UserControl
{
public TrafficLightControl()
{
InitializeComponent();
}
public void SetLight(string color)
{
ClearLights();
switch (color.ToLower())
{
case "red":
RedLight.Fill = Brushes.Red;
break;
case "yellow":
YellowLight.Fill = Brushes.Yellow;
break;
case "green":
GreenLight.Fill = Brushes.Green;
break;
default:
MessageBox.Show("Invalid color!");
break;
}
}
private void ClearLights()
{
RedLight.Fill = Brushes.Gray;
YellowLight.Fill = Brushes.Gray;
GreenLight.Fill = Brushes.Gray;
}
}
}
- 使用控件
接下来,您可以在您的主窗口中使用这个控件,并根据接收到的信号调用SetLight
方法来改变灯的颜色:
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace"
Title="MainWindow" Height="350" Width="525">
<Grid>
<local:TrafficLightControl x:Name="TrafficLight" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="Send Red Signal" Click="RedButton_Click" Width="150" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10"/>
<Button Content="Send Yellow Signal" Click="YellowButton_Click" Width="150" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,40,0,0"/>
<Button Content="Send Green Signal" Click="GreenButton_Click" Width="150" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,80,0,0"/>
</Grid>
</Window>
- 代码后端处理按钮点击事件
然后在主窗口代码后端中,处理按钮点击事件以发送信号:
using System.Windows;
namespace YourNamespace
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void RedButton_Click(object sender, RoutedEventArgs e)
{
TrafficLight.SetLight("red");
}
private void YellowButton_Click(object sender, RoutedEventArgs e)
{
TrafficLight.SetLight("yellow");
}
private void GreenButton_Click(object sender, RoutedEventArgs e)
{
TrafficLight.SetLight("green");
}
}
}
总结
这样你就可以创建一个简单的三色灯控件,并且通过按钮的点击事件来控制它的亮灯。根据你的需求,你可以进一步扩展这个控件的功能,比如添加自动切换灯的逻辑或者和外部信号进行交互。