この他のSO question はWPFのオートコンプリートテキストボックスについて質問します。数人がこれらを作成しました。 このコードプロジェクトの記事 。
しかし、WinFormsのオートコンプリートテキストボックスと比較できるWPFオートコンプリートテキストボックスは見つかりませんでした。コードプロジェクトのサンプルは、動作します...
...だが
だから、私の質問:
*無料のWPFオートコンプリートテキストボックス動作するがあり、高品質のUIエクスペリエンスが提供されていますか?*
[〜#〜] answer [〜#〜]
以下がその方法です。
.0。 WPF Toolkit を取得します
.1。 WPF ToolkitのMSIを実行する
.2。 Visual Studio内で、ツールボックス(具体的にはデータ視覚化グループ)からUIデザイナーにドラッグアンドドロップします。 VSツールボックスでは次のようになります。
デザイナーを使用したくない場合は、xamlを手作りします。次のようになります。
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an Assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
...ここで、ツールキットの名前空間は次のようにマッピングされます。
xmlns:toolkit="clr-namespace:System.Windows.Controls;Assembly=System.Windows.Controls.Input.Toolkit"
.3。 Populating
イベントのコードを提供します。私が使用したものは次のとおりです。
private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
string text = tbAssembly.Text;
string dirname = Path.GetDirectoryName(text);
if (Directory.Exists(Path.GetDirectoryName(dirname)))
{
string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
var candidates = new List<string>();
Array.ForEach(new String[][] { files, dirs }, (x) =>
Array.ForEach(x, (y) =>
{
if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase))
candidates.Add(y);
}));
tbAssembly.ItemsSource = candidates;
tbAssembly.PopulateComplete();
}
}
期待どおりに機能します。プロフェッショナルな気分です。 codeprojectコントロールが示す異常はありません。これは次のようになります。
WPFツールキットへのポインターのMatt に感謝します。
WPF Toolkit の最新のドロップには、AutoCompleteBoxが含まれています。 Microsoftの無料のコントロールセットで、その一部は.NET 4に含まれます。
以下がその方法です。
.1。 WPF ToolkitのMSIを実行する
.2。 Visual Studio内で、ツールボックス(具体的にはデータ視覚化グループ)からUIデザイナーにドラッグアンドドロップします。 VSツールボックスでは次のようになります。
または、xamlを手作りします。次のようになります。
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an Assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
...ここで、ツールキットの名前空間は次のようにマッピングされます。
xmlns:toolkit="clr-namespace:System.Windows.Controls;Assembly=System.Windows.Controls.Input.Toolkit"
.3。 Populating
イベントのコードを提供します。私が使用したものは次のとおりです。
private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
string text = tbAssembly.Text;
string dirname = Path.GetDirectoryName(text);
if (Directory.Exists(Path.GetDirectoryName(dirname)))
{
string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
var candidates = new List<string>();
Array.ForEach(new String[][] { files, dirs }, (x) =>
Array.ForEach(x, (y) =>
{
if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase))
candidates.Add(y);
}));
tbAssembly.ItemsSource = candidates;
tbAssembly.PopulateComplete();
}
}
WPFツールキットへのポインターを提供してくれたMattに感謝します。
Mindscapeは、WPF Autocomplete Textboxを含む つの無料コントロール も提供します
http://intellibox.codeplex.com/ は2013年10月1日以降に更新されたようで、単一のコントロールが含まれています。トロイの答えにコメントとして追加したが、十分な担当者がいない。そのコメントのため、私はそれをほとんど無視しました。
ドキュメントの使用例:
<auto:Intellibox ResultsHeight="80"
ExplicitlyIncludeColumns="True"
Name="lightspeedBox"
DisplayedValueBinding="{Binding Product_Name}"
SelectedValueBinding="{Binding Product_Id}"
DataProvider="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=LinqToEntitiesProvider}"
Height="26"
Margin="12,26,12,0"
VerticalAlignment="Top">
<auto:Intellibox.Columns>
<auto:IntelliboxColumn DisplayMemberBinding="{Binding Product_Name}"
Width="150"
Header="Product Name" />
<auto:IntelliboxColumn DisplayMemberBinding="{Binding Unit_Price}"
Width="75"
Header="Unit Price" />
<auto:IntelliboxColumn DisplayMemberBinding="{Binding Suppliers.Company_Name}"
Width="125"
Header="Supplier" />
</auto:Intellibox.Columns>
</auto:Intellibox>
社内プロジェクトでIntelliboxを使用しています。 http://intellibox.codeplex.com/
非常に直感的な検索のためのプロバイダーパターンの使用だと思います。
Rakeの答えは、その使用方法の例を示しており、彼が指摘しているように、昨年後半にいくつかの開発が見られました(ただし、これは最後に使用した後は十分です)。
CodePlexでWPF Auto Complete TextBoxを試すことができます: https://wpfautocomplete.codeplex.com/