この質問の長さについてはご容赦ください。できるだけ説明的になるように努めました。私はWPFプログラミングが初めてです。私は基本的にRadDataFilter コントロールを構築しようとしています:
RadDataFilter は、クエリ式を作成してコレクションをフィルター処理するために使用されます。コントロールは通常、データベースからすべてのデータを取得し、それらをフィルタリングすることによって使用されます。
ただし、それを使用して SQL クエリ式を作成し、データベースにクエリを実行してデータを取得しようとしています。当社は Telerik 製品のライセンスを取得しているため、コントロールを試して使用する必要がありました。残念ながら、このコントロールは、左ドロップダウン(RadComboBox)をカスタマイズしたいほど柔軟ではありません。
ユーザーがフィルタリングできるアイテムがいくつかあるため、それらに単一の dropdpwn を提供することは現実的ではありません。ドロップダウンの代わりにカスタム コントロールが必要です。
この問題には次の回避策があります。
そのコントロールのテンプレートを抽出し、ここで説明されているように XAML でオーバーライドします。ただし、これを行っているにもかかわらず、コントロールを変更することはできません。私のWPFの知識不足が原因だと思います。
Telerik のソース コードを変更してみてください (コードのライセンスも取得しています)。ただし、このアプローチでは、アップグレードのたびに変更を加え続ける必要があり、これはチームにとって手間がかかります。
カスタム コントロールを作成してみてください。
3番目のアプローチを探しています。これを達成するための簡単な方法 (最初の 2 つのアプローチを使用) またはその他の解決策がある場合は、お知らせください。
3 番目のアプローチを実装するには、ControlTemplate (カスタム コントロールを含む) を使用して、各ノードで TreeView を使用することを考えています。ToString()
1 つのクエリ条件を提供するカスタム コントロールのメソッドをオーバーライドします。完了したら、ルート ノードの子を繰り返し処理して、最終的なクエリ式を作成します。
ただし、お気づきのように、2 つの異なる ControlTemplate が必要です (1 つはフィルター式を作成できるもので、もう 1 つは RadDataFilter に似た演算子を使用するものです)。このように複数のテンプレートを設定する方法がわかりません。
これは一部の開発者にとっては簡単に聞こえるかもしれませんが、私は C# と WPF プログラミングにまったく慣れていないので、慣れるには時間と経験が必要です。
この問題を解決するために私が試みることができる他の解決策を知っている場合はお知らせください。カスタム コントロールを作成した方がよいと思われる場合は、これを実装する最善の方法を教えてください。カスタム コントロールを作成するための私のアプローチについてもコメントしてください。
ありがとう!