Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengikat kontrol perancang kotak teks ke argumen aktivitas cukup mudah; namun mengikat kontrol perancang kompleks (seperti kotak kombo) ke argumen aktivitas dapat menimbulkan tantangan. Topik ini membahas cara mengikat argumen aktivitas ke kontrol kotak kombo pada perancang aktivitas kustom.
Membuat pengonversi item kotak kombo
Buat solusi kosong baru di Visual Studio yang disebut CustomProperty.
Buat kelas baru bernama ComboBoxItemConverter. Tambahkan referensi ke System.Windows.Data, dan miliki kelas yang berasal dari IValueConverter. Minta Visual Studio mengimplementasikan antarmuka untuk menghasilkan stub untuk
ConvertdanConvertBack.Tambahkan kode berikut ke metode
Convert. Kode ini mengonversi InArgument<T> aktivitas jenis String menjadi nilai yang akan ditempatkan di perancang.ModelItem modelItem = value as ModelItem; if (value != null) { InArgument<string> inArgument = modelItem.GetCurrentValue() as InArgument<string>; if (inArgument != null) { Activity<string> expression = inArgument.Expression; VisualBasicValue<string> vbexpression = expression as VisualBasicValue<string>; Literal<string> literal = expression as Literal<string>; if (literal != null) { return "\"" + literal.Value + "\""; } else if (vbexpression != null) { return vbexpression.ExpressionText; } } } return null;Ekspresi dalam cuplikan kode di atas juga dapat dibuat menggunakan CSharpValue<TResult> alih-alih VisualBasicValue<TResult>.
ModelItem modelItem = value as ModelItem; if (value != null) { InArgument<string> inArgument = modelItem.GetCurrentValue() as InArgument<string>; if (inArgument != null) { Activity<string> expression = inArgument.Expression; CSharpValue<string> csexpression = expression as CSharpValue<string>; Literal<string> literal = expression as Literal<string>; if (literal != null) { return "\"" + literal.Value + "\""; } else if (csexpression != null) { return csexpression.ExpressionText; } } } return null;Tambahkan kode berikut ke metode
ConvertBack. Kode ini mengonversi item kotak kombo masuk kembali ke InArgument<T>.// Convert combo box value to InArgument<string> string itemContent = (string)((ComboBoxItem)value).Content; VisualBasicValue<string> vbArgument = new VisualBasicValue<string>(itemContent); InArgument<string> inArgument = new InArgument<string>(vbArgument); return inArgument;Ekspresi dalam cuplikan kode di atas juga dapat dibuat menggunakan CSharpValue<TResult> alih-alih VisualBasicValue<TResult>.
// Convert combo box value to InArgument<string> string itemContent = (string)((ComboBoxItem)value).Content; CSharpValue<string> csArgument = new CSharpValue<string>(itemContent); InArgument<string> inArgument = new InArgument<string>(csArgument); return inArgument;
Menambahkan ComboBoxItemConverter ke perancang kustom aktivitas
Tambahkan item baru ke proyek. Dalam dialog Item Baru, pilih simpul Alur Kerja dan pilih Perancang Aktivitas sebagai jenis item baru. Beri nama item CustomPropertyDesigner.
Tambahkan Kotak Kombo ke perancang baru. Di properti Item, tambahkan beberapa item ke kotak kombo, dengan nilai Konten "Item1" dan 'Item2".
Ubah XAML kotak kombo untuk menambahkan pengonversi item baru sebagai pengonversi item yang akan digunakan untuk kotak kombo. Pengonversi ditambahkan sebagai sumber daya di segmen ActivityDesigner.Resources, dan tentukan pengonversi di atribut Converter untuk ComboBox. Perhatikan bahwa namespace layanan proyek ditentukan dalam atribut namespace layanan untuk perancang aktivitas; jika perancang akan digunakan dalam proyek yang berbeda, namespace layanan ini perlu diubah.
<sap:ActivityDesigner x:Class="CustomProperty.CustomPropertyDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:CustomProperty" xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"> <sap:ActivityDesigner.Resources> <ResourceDictionary> <c:ComboBoxItemConverter x:Key="comboBoxItemConverter"/> </ResourceDictionary> </sap:ActivityDesigner.Resources> <Grid> <ComboBox SelectedValue="{Binding Path=ModelItem.Text, Mode=TwoWay, Converter={StaticResource comboBoxItemConverter}}" Height="23" HorizontalAlignment="Left" Margin="132,5,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding}"> <ComboBoxItem>item1</ComboBoxItem> <ComboBoxItem>item2</ComboBoxItem> </ComboBox> </Grid> </sap:ActivityDesigner>Buat item baru berjenis CodeActivity. Kode default yang dibuat oleh IDE untuk aktivitas akan cukup untuk contoh ini.
Tambahkan properti berikut ke definisi kelas:
[Designer(typeof(CustomPropertyDesigner))]Baris ini mengaitkan perancang baru dengan kelas baru.
Aktivitas baru sekarang harus dikaitkan dengan perancang. Untuk menguji aktivitas baru, tambahkan ke alur kerja, dan atur kotak kombo ke dua nilai. Jendela properti harus diperbarui untuk mencerminkan nilai kotak kombo.