首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF4.0 實戰(十六):WPF 與 WF4 互動——紅綠燈模擬器

     編輯:關於.NET

紅綠燈循環邏輯 (紅 5 秒 → 黃 2 秒 → 綠 5 秒 → 黃 2 秒 → 紅...) 以 WF4 流程控制,WPF 透過資料綁定呈現,示範 WPF 與 WF 透過擴充機制雙向互動。

WPF 介面 XAML

<Grid>
  <Border Background="AntiqueWhite" CornerRadius="10" BorderBrush="Gray" BorderThickness="2">
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
      <StackPanel.Resources>
        <Style TargetType="Ellipse">
          <Setter Property="Width" Value="100"/>
          <Setter Property="Height" Value="100"/>
          <Setter Property="Fill" Value="LightGray"/>
          <Setter Property="Stroke" Value="Gray"/>
          <Setter Property="StrokeThickness" Value="2"/>
          <Setter Property="Margin" Value="4"/>
        </Style>
      </StackPanel.Resources>
      <Ellipse Fill="{Binding Variable1, UpdateSourceTrigger=PropertyChanged}"/>
      <Ellipse Fill="{Binding Variable2, UpdateSourceTrigger=PropertyChanged}"/>
      <Ellipse Fill="{Binding Variable3, UpdateSourceTrigger=PropertyChanged}"/>
    </StackPanel>
  </Border>
</Grid>

WF 流程設計

  • 三個變數 Variable1/2/3 對應三顆燈顏色
  • 初始:紅燈亮 (Red)、其餘灰
  • 序列:更新綁定屬性 → Delay 5 秒 → 更新黃燈 → Delay 2 秒 → 更新綠燈 → ... 循環
WF 流程設計畫面

WPF 宿主程式碼

public partial class MainWindow : Window
{
    WorkflowApplication _application1;
    bool _isWorkflowStarted;

    public WorkflowDataContext WorkflowContext
    {
        get => _workflowContext;
        set
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                (Action)delegate { DataContext = value; });
            _workflowContext = value;
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        _application1 = new WorkflowApplication(new Activity1());
        _application1.Completed = args =>
        {
            Dispatcher.Invoke(DispatcherPriority.Normal,
                (Action)delegate { DataContext = null; _isWorkflowStarted = false; });
        };
        _application1.Extensions.Add(this); // 關鍵:將視窗本身註冊為擴充
        _application1.Run();
        _isWorkflowStarted = true;
    }

    private void Window_Closed(object sender, EventArgs e)
    {
        if (_application1 != null && _isWorkflowStarted)
            _application1.Terminate("Main Window closed");
    }
}
紅燈狀態 黃燈狀態 綠燈狀態

關鍵技術:WorkflowApplication.Extensions.Add(this) 將 WPF 視窗註冊為工作流擴充,流程中自訂活動即可取得擴充並更新綁定屬性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved