4

これが取引です。ListBox を作成してスタイルを設定できます。Expression Blend 3 で状態が使用可能になるように、テンプレートのコピーを編集できます。また、状態を変更して、ライン アイテムの選択時に背景色が変更されるようにすることもできます。しかし、ContentPresenter のためにテキストの前景色を変更することはできません! この一見簡単なタスクを達成する方法を示す XAML の例はありますか?

答えは ContentPresenter を削除し、ある種の ListBoxItem スタイルまたはテンプレートに置き換えることにあるようですが、ここで行き詰まります。ListBox の ContentPresenter は、他のテンプレート「{TemplateBinding Template}」を参照しています - それはどこですか? また、何らかの方法で ContentPresenter を変更しようとすると、States パネルが空白になり、XAML の泥沼が残ります。幸いなことに、CTRL-Z があります。

Microsoft は、XAML のアプローチを再考するか、Blend をより完全なツールにする必要があると思います。それが機能する方法は、任意の要素をクリックしてその状態を定義できるようにすることです。ルールを破ろうとしている場合、Blend はこれを教えて修正する方法を提供する必要があります。状態パネルを空にするだけでは役に立ちません。

4

3 に答える 3

1

通常、必要に応じて使用する色など、アイテム自体の内容については責任を負いListBoxません。Foregroundアイテムは一連の画像である可能性があり、その場合Foregroundは意味がありません。アイテムは、それぞれ異なる色を必要とするさまざまなテキスト アイテムを含む複雑な複数要素の UI である可能性があるため、単一の色を指定するForegroundという考えは意味がありません。ListBoxForeground

これが、アイテム コンテナのデフォルト テンプレートが を使用する理由です。これは、ContentPresenter基本的に「任意のアイテム コンテンツをここに配置する」ことを意味します。

コンテナ アイテムのスタイルに使用する一般的なリスト ボックスの新しいスタイルを作成する場合は、この制限を受け入れる必要があります。VSM は含まれているアイテムの詳細を認識できません。

ただし、 の特定のインスタンスのコンテナ スタイルを作成していてListBox、表示されるアイテムのタイプと性質を理解している場合はContentPresenter、テンプレートに を保持する必要はありません。各項目を表示するために必要な Xaml に直接置き換えることができます。

たとえばContentPresenter、Xaml の を次のように置き換えることができます。

<Grid Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
    <TextBlock x:Name="ContentItem" Text="{Binding Property1, Mode=OneWay}" TextWrapping="Wrap" Foreground="#FFDC1C1C"/>
</Grid>

項目の Padding と Horizo​​ntalAlignment は、プレゼンターが使用するものと同じであることに注意してください。この場合TextBlock、「ContentItem」と呼ばれる単一のものを使用し、それをソース オブジェクトProperty1プロパティにバインドしています。

テンプレートにTextBlockアイテムを表示するための名前が含まれているので、VSM をいじって、Foregroundさまざまな異なるビジュアル状態に合わせて変更できます。

于 2010-02-04T10:18:05.510 に答える
1

古い質問を復活させて申し訳ありませんが、まったく同じ問題に行き詰まり、解決策を見つけました。誰が知っているかを共有します。誰かにとって役立つかもしれません。

テンプレートの ContentPresenter を ContentControl に置き換えると、機能します (ContentControl には Foreground プロパティがあります)。

于 2010-08-19T21:36:15.187 に答える
0

ああ、かっこいい!フィードバックをお寄せいただきありがとうございます。最終的にユーザー コントロールを作成し、色を設定するパブリック Foreground プロパティを公開したと思いますが、思い出せません。あなたの答えを以前のものと組み合わせると、本当に役に立ちます。

余談ですが、私は分解して、依存関係プロパティと 9 ヤード全体を使用して独自のカスタム コントロールを作成する方法を学びました。今は WPF/SL でなんでもできる気がします。

于 2010-08-20T14:29:19.730 に答える