2011-04-12 4 views
3

私はリストボックスを使用して、テンプレートにコンボボックスを含む編集可能なオブジェクトのリストを表示しています。WPFリストボックス内の選択を非表示にして、含まれているコントロール内に保持

私は何のために使用されていないリストボックスの選択を非表示にするには、この一般的なテクニック、使用:問題は、これがコンボボックスのドロップダウンリストの選択を台無しです

<ListBox.Resources> 
    <Style TargetType="ListBoxItem"> 
    <Style.Resources> 
     <Brush x:Key="{x:Static SystemColors.HighlightBrushKey}">Transparent</Brush> 
     <Brush x:Key="{x:Static SystemColors.ControlBrushKey}">Transparent</Brush> 

を。

テンプレートでこれらのリソースを再度オーバーライドして、ハードコードする代わりに元の値(SystemColors.HighlightBrushなど)を指定したいとします。どうやってやるの?

<ListBox.ItemTemplate> 
    <DataTemplate DataType="{x:Type SearchService:Criterion}"> 
    <DataTemplate.Resources> 
     <!--I know how to specify a hardcoded brush here, 
      but not how to reference one from SystemColors--> 

答えて

9

私はあなたがだけではなく、ItemsControlを使用する必要があります何のために選択を使用しない場合は何も

に使用 ない リストボックスの選択を、非表示にするには、この一般的なテクニックを使用していました。

+1

あなたは正しいです、それは動作します。私は抽象的だと思った。 –

3

あなたは行うことができます:

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
    Color="{x:Static SystemColors.HighlightColor}" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
    Color="{x:Static SystemColors.ControlColor}" /> 

または

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
    Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
    Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" /> 

をデフォルトの色にブラシを復元します。

+0

私はそれほど遠くないと知っていました。ありがとう! :-) –

+2

あなたのアプリケーションの実行中にシステムの色が変わって、色を更新したい場合は、 '{DynamicResource {x:Static SystemColors.HighlightColorKey}}'を使います。 –

+0

@Andrei - 良い点、あなたの提案を含めるために私の答えを更新しました。質問に答えるためには – CodeNaked

関連する問題