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

C# 開發 WPF/Silverlight 動畫與遊戲教學 (42-2):自訂 ChildWindow 控件實現方案對比

     編輯:關於C語言

Silverlight 自訂子視窗控件三種實現方案深度對比

針對 RPG、SLG 類遊戲大量使用的可拖曳懸浮視窗需求,分析三種 ChildWindow 實現方案的優劣,最終選定用戶控件方案。

方案一:底層繼承 (BaseWindow.cs)

  • 傳統做法:繼承 Control/ContentControl/UserControl,程式碼建構介面
  • 缺點:WPF/Silverlight 中 XAML 介面描述優勢無法發揮,底層控件開發門檻高

方案二:樣板控件

Visual Studio 專案範本「Silverlight 樣板化控件」生成 Themes/Generic.xaml:

<Style TargetType="local:QXChildWindow">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="local:QXChildWindow">
        …樣板內容…
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

實測問題:中文支援差、OnApplyTemplate 重寫不靈活、擴充性與開發難度不理想。

方案三:用戶控件 (最終選定)

繼承 UserControl,XAML 結構極簡卻高度彈性:

<UserControl x:Class="QXGameEngine.Control.QXChildWindow"
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  MouseLeftButtonDown="UserControl_MouseLeftButtonDown">
  <Canvas>
    <Canvas x:Name="Head" MouseLeftButtonUp="Head_MouseLeftButtonUp" MouseMove="Head_MouseMove">
      <ContentPresenter x:Name="HeadPresenter" />
      <Rectangle x:Name="CloseButton">
        <ToolTipService.ToolTip>
          <TextBlock x:Name="Tip" Text="關閉" />
        </ToolTipService.ToolTip>
      </Rectangle>
    </Canvas>
    <Canvas x:Name="Body">
      <ContentPresenter x:Name="BodyPresenter" />
    </Canvas>
  </Canvas>
</UserControl>

核心優勢:

  • ContentPresenter 實現頭部與主體內容的任意替換 (圖片、文字、複雜面板)
  • 事件處理集中在代碼後置,邏輯清晰
  • 原生支援拖曳、分層管理 (ZIndex)、與遊戲物件互動
ChildWindow 結構示意圖
圖 1:QXChildWindow 結構圖解
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved