WPF を使用して WeChat パブリック アカウントの複數(shù)の顧客サービス機能を?qū)g裝する
Mar 05, 2017 pm 02:16 PM元のタイトル: WPF を使用して WeChat パブリック アカウントの複數(shù)顧客サービス機能を?qū)g裝する
概要:
これは、WPF をフロントエンド テクノロジとして使用して、デスクトップ バージョンの WeChat 複數(shù)顧客サービス システムを?qū)g裝することです。このプロジェクトは、フロントエンド フレームワークとして Prism を使用し、MVVM モデルを使用して UI とロジック コードを効果的に分離し、MefBootstrapper と統(tǒng)合された MEF IOC コンテナを使用して各モジュール オブジェクトを分離します。イベントとインタラクションを?qū)g裝するための IEventAggregator の合理的な使用。この記事には、対応する機能を?qū)毪工腚Hに関連する実裝リファレンスが記載されており、読者は改善點を參照して自分のプロジェクトに導(dǎo)入することができます。
プログラム実行インターフェイスと機能のプレビュー:
1. ログイン:
機能: ユーザーとユーザー設(shè)定の記憶をサポートし、ユーザーのパスワードを記憶することを選択できます。
実裝関連:
ログイン ウィンドウをカスタマイズし、Microsoft.Windows.Shell を?qū)毪筏蓼埂iv連するカスタム ウィンドウの実裝については、WPF カスタム Chrome ライブラリと MSDN WindowChrome クラス を參照してください。
最小化、最大化、および閉じるボタン機能を?qū)g裝するには、上記の例を參照してください。 Loginボタン、スタイルのカスタマイズ、書き換えボタンのテンプレート、參照コードは次のとおりです。
RREEEE
絵文字: テキストボックスに絵文字のエスケープ記號を入力し、エスケープ記號に従って対応する絵文字畫像を見つけて置き換えます。 InlineUIContainer
Gif ダイナミック グラフィック: WPF では Gif がサポートされていないため、GIF 式を表示するにはカスタム ユーザー コントロールを作成する必要があります。
[WPF 問題] WPF で動的 GIF を表示する
スクリーンショット機能: ソース コードはオンラインで見つけた Winform のスクリーンショットです。いくつかの小さな変更を加えてプロジェクトに導(dǎo)入しました。
參考:C#でフル機能のスクリーンショットコントロールを?qū)g現(xiàn)する(4) - フルバージョン http://ipnx.cn/
3. 顧客リスト
コントロールはTabControlで、TabControlのStyleとTabItemを書き換えます。スタイル
?<Style x:Key="LogginButton" TargetType="{x:Type Button}"> ????????<Setter Property="Template"> ????????????<Setter.Value> ????????????????<ControlTemplate TargetType="{x:Type Button}"> ????????????????????<Grid > ????????????????????????<Border x:Name="Bd" Background="{TemplateBinding Background }" BorderBrush="#d3d3d3" BorderThickness="1"> ????????????????????????</Border> ????????????????????????<ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/> ????????????????????</Grid> ????????????????????<ControlTemplate.Triggers> ????????????????????????<Trigger Property="IsMouseOver" Value="True"> ????????????????????????????<Setter TargetName="Bd" Property="BorderBrush" Value="#08bd14"/> ????????????????????????????<Setter TargetName="Bd" Property="Opacity" Value="0.8"/> ????????????????????????</Trigger> ????????????????????????<Trigger Property="IsPressed" Value="True"> ????????????????????????????<Setter TargetName="Bd" Property="Background" Value="#f3f3f3"/> ????????????????????????????<Setter TargetName="contentPresenter" Property="Margin" Value="2,2,0,0"/> ????????????????????????</Trigger> ????????????????????</ControlTemplate.Triggers> ????????????????</ControlTemplate> ????????????</Setter.Value> ????????</Setter> ????</Style>
コードを表示
4. クイック返信パネル
アプリケーションツリービューと HierarchicalDataT テンプレートはツリーを?qū)g裝しますリスト。
5. 顧客の転送
顧客の転送ウィンドウをカスタマイズします。スタイルの Xaml コードは次のとおりです:
<Style x:Key="NoResize_Window" TargetType="{x:Type Window}"> ????????????????????????<Setter Property="FontFamily" Value="Consolas,Microsoft YaHei" /> ????????????????????????<Setter Property="ResizeMode" Value="CanMinimize" /> ????????????????????????<Setter Property="Template"> ????????????????????????????<Setter.Value> ????????????????????????????????<ControlTemplate TargetType="{x:Type Window}"> ????????????????????????????????????<Grid> ????????????????????????????????????????<Grid.RowDefinitions> ????????????????????????????????????????????<RowDefinition Height="30" /> ????????????????????????????????????????????<RowDefinition Height="*" /> ????????????????????????????????????????</Grid.RowDefinitions> ????????????????????????????????????????<Border Grid.Row="0" > ????????????????????????????????????????????<Border.Background> ????????????????????????????????????????????????<LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> ????????????????????????????????????????????????????<GradientStop Color="#494A52" Offset="0"/> ????????????????????????????????????????????????????<GradientStop Color="#45464f" Offset="1"/> ????????????????????????????????????????????????</LinearGradientBrush> ????????????????????????????????????????????</Border.Background> ????????????????????????????????????????????<Grid> ????????????????????????????????????????????????<!--Icon and Title--> ????????????????????????????????????????????????<DockPanel > ????????????????????????????????????????????????????<TextBlock Margin="12,0,0,0" Text="{TemplateBinding Title}" FontFamily="Calibri" VerticalAlignment="Center" Foreground="#FFFFFF" /> ????????????????????????????????????????????????????<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" VerticalAlignment="Top"> ????????????????????????????????????????????????????????<ctrl:MinAndCloseCaptionButton></ctrl:MinAndCloseCaptionButton> ????????????????????????????????????????????????????</StackPanel> ????????????????????????????????????????????????</DockPanel> ????????????????????????????????????????????</Grid> ????????????????????????????????????????</Border> ????????????????????????????????????????<Grid Grid.Row="1" > ????????????????????????????????????????????<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Margin}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" > ????????????????????????????????????????????????<ContentPresenter /> ????????????????????????????????????????????</Border> ????????????????????????????????????????</Grid> ????????????????????????????????????</Grid> ????????????????????????????????</ControlTemplate> ????????????????????????????</Setter.Value> ????????????????????????</Setter> ????????????????????</Style>
View Code
轉(zhuǎn)接客戶列表,樣式Xaml代碼如下:
????<Style x:Key="OnlineUserListBoxStyle" TargetType="{x:Type ListBox}"> ????????<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> ????????<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> ????????<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> ????????<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> ????????<Setter Property="ScrollViewer.CanContentScroll" Value="true"/> ????????<Setter Property="ScrollViewer.PanningMode" Value="Both"/> ????????<Setter Property="Stylus.IsFlicksEnabled" Value="False"/> ????????<Setter Property="VerticalContentAlignment" Value="Center"/> ????????<Setter Property="Template"> ????????????<Setter.Value> ????????????????<ControlTemplate TargetType="{x:Type ListBox}"> ????????????????????<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true"> ????????????????????????<DockPanel> ????????????????????????????<Border BorderBrush="#dbdbdb" BorderThickness="0,0,0,1" DockPanel.Dock="Top"> ????????????????????????????????<Grid Background="#f6f6f6" TextElement.Foreground="#999999" DockPanel.Dock="Top"> ????????????????????????????????????<Grid.ColumnDefinitions> ????????????????????????????????????????<ColumnDefinition Width="*" /> ????????????????????????????????????????<ColumnDefinition Width="*"/> ????????????????????????????????????????<ColumnDefinition Width="*"/> ????????????????????????????????????</Grid.ColumnDefinitions> ????????????????????????????????????<TextBlock Margin="5,7,0,6" Grid.Column="0">狀態(tài)</TextBlock> ????????????????????????????????????<TextBlock Margin="5,7,0,6" Grid.Column="1">工號</TextBlock> ????????????????????????????????????<TextBlock Margin="5,7,0,6" Grid.Column="2">昵稱</TextBlock> ????????????????????????????????</Grid> ????????????????????????????</Border> ????????????????????????????<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"> ????????????????????????????????<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> ????????????????????????????</ScrollViewer> ????????????????????????</DockPanel> ????????????????????</Border> ????????????????????<ControlTemplate.Triggers> ????????????????????????<Trigger Property="IsEnabled" Value="false"> ????????????????????????????<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> ????????????????????????</Trigger> ????????????????????</ControlTemplate.Triggers> ????????????????</ControlTemplate> ????????????</Setter.Value> ????????</Setter> ????</Style> ????<Style x:Key="OnlineUserListBoxItemStyle" TargetType="{x:Type ListBoxItem}"> ????????<Setter Property="Background" Value="Transparent"/> ????????<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> ????????<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> ????????<Setter Property="Padding" Value="2,0,0,0"/> ????????<Setter Property="Template"> ????????????<Setter.Value> ????????????????<ControlTemplate TargetType="{x:Type ListBoxItem}"> ????????????????????<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> ????????????????????????<Grid> ????????????????????????????<Grid.ColumnDefinitions> ????????????????????????????????<ColumnDefinition Width="*" /> ????????????????????????????????<ColumnDefinition Width="*"/> ????????????????????????????????<ColumnDefinition Width="*"/> ????????????????????????????</Grid.ColumnDefinitions> ????????????????????????????<StackPanel Grid.Column="0" Orientation="Horizontal" > ????????????????????????????????<Border Margin="4,2,4,2" Height="24" Width="24" > ????????????????????????????????????<Grid> ????????????????????????????????????????<Path Fill="#6f6f6f" Data="M6,17C6,15 10,13.9 12,13.9C14,13.9 18,15 18,17V18H6M15,9A3,3 0 0,1 12,12A3,3 0 0,1 9,9A3,3 0 0,1 12,6A3,3 0 0,1 15,9M3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5C3.89,3 3,3.9 3,5Z" /> ????????????????????????????????????????<Path Visibility="{Binding Path=IsOnLine,Converter={StaticResource BoolToVisibilityConverter}}" Fill="#8bc34a" Data="M6,17C6,15 10,13.9 12,13.9C14,13.9 18,15 18,17V18H6M15,9A3,3 0 0,1 12,12A3,3 0 0,1 9,9A3,3 0 0,1 12,6A3,3 0 0,1 15,9M3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5C3.89,3 3,3.9 3,5Z" /> ????????????????????????????????????</Grid> ????????????????????????????????</Border> ????????????????????????????????<TextBlock Padding="4,0,4,0" VerticalAlignment="Center" Text="{Binding Path=OnLineStatus}" /> ????????????????????????????</StackPanel> ????????????????????????????<StackPanel Grid.Column="1" Orientation="Horizontal" > ????????????????????????????????<TextBlock Padding="4,0,4,0" VerticalAlignment="Center" Text="{Binding Path=Name}"/> ????????????????????????????</StackPanel> ????????????????????????????<StackPanel Grid.Column="2" Orientation="Horizontal" > ????????????????????????????????<TextBlock Padding="4,0,4,0" VerticalAlignment="Center" Text="{Binding Path=RealName}"/> ????????????????????????????</StackPanel> ????????????????????????</Grid> ????????????????????</Border> ????????????????????<ControlTemplate.Triggers> ????????????????????????<Trigger Property="IsSelected" Value="true"> ????????????????????????????<Setter Property="Background" TargetName="Bd" Value="#9ea5b8"/> ????????????????????????????<Setter Property="Foreground" Value="#ffffff"/> ????????????????????????</Trigger> ????????????????????????<MultiTrigger> ????????????????????????????<MultiTrigger.Conditions> ????????????????????????????????<Condition Property="IsSelected" Value="false" /> ????????????????????????????????<Condition Property="IsMouseOver" Value="true" /> ????????????????????????????</MultiTrigger.Conditions> ????????????????????????????<Setter Property="Background" TargetName="Bd" Value="#e0e1e5"/> ????????????????????????</MultiTrigger> ????????????????????????<Trigger Property="IsEnabled" Value="false"> ????????????????????????????<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> ????????????????????????</Trigger> ????????????????????</ControlTemplate.Triggers> ????????????????</ControlTemplate> ????????????</Setter.Value> ????????</Setter> ????</Style>
View Code
?
關(guān)于以上控件的事件與命令,引進(jìn)System.Windows.Interactivity.
在Xmal中導(dǎo)入命名控件?xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
使用代碼如下:
????????????????<ListBox Margin="12,0,12,0" BorderThickness="1" Style="{DynamicResource OnlineUserListBoxStyle}" ItemContainerStyle="{DynamicResource OnlineUserListBoxItemStyle}" ItemsSource="{Binding Path= AllUsers}" SelectedItem="{Binding Path=SelectedUser}" > ????????????????????<i:Interaction.Triggers> ????????????????????????<i:EventTrigger EventName="SelectionChanged"> ????????????????????????????<i:InvokeCommandAction Command="{Binding Path= UserSelectedChangedCommand}" /> ????????????????????????</i:EventTrigger> ????????????????????</i:Interaction.Triggers> ????????????????</ListBox>
View Code
?
系統(tǒng)運行截圖:
?
說明:
程序UI布局及展示為模仿微信多客服官方程序,所有樣式源碼為本人所寫及參考網(wǎng)上部分資源。
程序中所用圖標(biāo)來源于這兩個資源庫:http://ipnx.cn/ ?http://ipnx.cn/
?
小結(jié):
本文只作了簡單的介紹,主要介紹UI上的一些實現(xiàn)和功能介紹。具體后臺業(yè)務(wù)邏輯看以后能否補上,包括Prism使用,和微信公眾號相關(guān)的知識。
?
博客地址:http://ipnx.cn/
博客版權(quán):本文以學(xué)習(xí)、研究和分享為主,歡迎轉(zhuǎn)載,但必須在文章頁面明顯位置標(biāo)明原文連接并保留此處說明。
如果文中有不妥或者錯誤的地方還望您指出,以免讓讀者產(chǎn)生誤解。
感謝您的閱讀,喜歡就點個贊,【推薦】一下!
?

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Scrapy は記事のクローリングと WeChat パブリックアカウントの分析を?qū)g裝します 近年人気のソーシャルメディアアプリケーションである WeChat で運用されているパブリックアカウントも非常に重要な役割を果たしています。誰もが知っているように、WeChat の公開アカウントは記事、グラフィック メッセージ、その他の情報を公開できるため、情報と知識の海です。この情報は、メディア報道、學(xué)術(shù)研究など、さまざまな分野で広く使用できます。そこで、この記事では、Scrapy フレームワークを使用して WeChat パブリック アカウントの記事をクロールおよび分析する方法を紹介します。 Scr

WeChat パブリック アカウント認(rèn)証と非認(rèn)証の違いは、認(rèn)証ロゴ、機能権限、プッシュ頻度、インターフェイス権限、およびユーザーの信頼にあります。詳細(xì)な紹介: 1. 認(rèn)証ロゴ. 認(rèn)証されたパブリック アカウントは、青い V ロゴである公式認(rèn)証ロゴを取得します. このロゴは、パブリック アカウントの信頼性と権威を高め、ユーザーが本物の公式パブリック アカウントを識別しやすくします。 ; 2. 機能の権限: 認(rèn)証されたパブリック アカウントには、非認(rèn)証のパブリック アカウントよりも多くの機能と権限があります。たとえば、認(rèn)証されたパブリック アカウントは、オンライン決済や商用操作などを?qū)g現(xiàn)するための WeChat 支払い機能の有効化を申請できます。

Python は、強力なデータ処理機能と Web クローリング機能を備えたエレガントなプログラミング言語です。デジタル時代において、インターネットには大量のデータが溢れており、クローラはデータを取得する重要な手段となっており、Python クローラはデータ分析やマイニングに広く使用されています。この記事では、Python クローラーを使用して WeChat 公開アカウントの記事情報を取得する方法を紹介します。 WeChat 公式アカウントは、オンラインで記事を公開するための人気のソーシャル メディア プラットフォームであり、多くの企業(yè)やセルフメディアのプロモーションとマーケティングのための重要なツールです。

WPF は、Microsoft によって開発された .NET Framework に基づくデスクトップ アプリケーション開発フレームワークです。豊富なユーザー インターフェイス要素、データ バインディング、アニメーション、その他の機能を提供し、開発者が高品質(zhì)のデスクトップ アプリケーションを簡単に作成できるようにします。

今日のインターネット時代において、WeChat 公式アカウントはますます多くの企業(yè)にとって重要なマーケティング チャネルとなっています。 WeChat 公式アカウントにさらに多くの機能を?qū)g裝したい場合は、多くの場合、対応するインターフェイスを作成する必要があります。この記事では、例として PHP 言語を使用して、WeChat パブリック アカウント API インターフェイスを構(gòu)築する方法を紹介します。 1. 準(zhǔn)備 WeChat パブリック アカウント API インターフェイスを作成する前に、開発者は WeChat パブリック アカウントを取得し、WeChat パブリック プラットフォームで開発者インターフェイスの権限を申請する必要があります。アプリケーションが成功すると、関連する開発者の AppID と AppSe を取得できます。

Laravel を使用して WeChat 公式アカウントをベースにしたオンライン注文システムを開発する方法 WeChat 公式アカウントの普及に伴い、ますます多くの企業(yè)がオンライン マーケティングの重要なチャネルとして使用し始めています。ケータリング業(yè)界では、WeChat パブリック アカウントに基づいたオンライン注文システムを開発することで、企業(yè)の効率と売上を向上させることができます。この記事では、Laravel フレームワークを使用してそのようなシステムを開発する方法と、具體的なコード例を紹介します。プロジェクトの準(zhǔn)備 まず、Laravel フレームワークがローカル環(huán)境にインストールされていることを確認(rèn)する必要があります。わかりました

公開アカウントでは、1 日に 1 つの記事を投稿できるだけでなく、一度に最大 8 つの記事を公開することができます 複數(shù)の記事を公開する方法: 1. 左側(cè)の「素材管理」をクリックし、「新しいグラフィックとテキスト素材」をクリックします。編集を開始します。最初の記事; 2. 最初の記事を編集したら、左側(cè)の最初の記事の下にある + 記號をクリックし、「畫像とテキストメッセージ」をクリックして 2 番目の記事を編集します; 3. 複數(shù)の畫像とテキストが完了したら、 をクリックします「保存して一括送信」で複數(shù)記事の公開が完了します。

インターネットの普及とモバイルデバイスの普及により、WeChat 公式アカウントは企業(yè)のマーケティングに欠かせないものになりました。 WeChat パブリック アカウントを通じて、企業(yè)はユーザーと簡単に対話し、製品やサービスを宣伝し、ブランド認(rèn)知度を高めることができます。 WeChat パブリック アカウント アプリケーションをより適切に開発するために、Go 言語を使用して WeChat パブリック アカウント アプリケーションを構(gòu)築することを選択する開発者や企業(yè)がますます増えています。 Go 言語は Google によって開発されたプログラミング言語であり、その構(gòu)文は簡潔であり、高性能で同時実行性の高いリアルタイム アプリケーションの構(gòu)築に適しています。使いやすさの面でも、
