2016-10-11 8 views
2

の「System.Windows.Styles」を表示:WPFカスタムコンボボックスは、私がこのようなカスタムWPFのComboBox作成されたアイテム

<ComboBox 
    x:Name="ComboBoxBtn" 
    VerticalAlignment="Top" 
    HorizontalAlignment="Left" 
    Margin="0,0,0,-1" 
    Width="300" 
    ItemsSource="{Binding Source, RelativeSource={RelativeSource AncestorType=UserControl}}" 
    SelectedItem="{Binding Path=Selected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}" 
     IsSynchronizedWithCurrentItem="True"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <ContentControl> 
        <Style TargetType="ContentControl"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Favorite}" Value="True"> 
           <Setter Property="Content"> 
            <Setter.Value> 
             <Grid> 
              <Grid.Style> 
               <Style TargetType="Grid"> 
                <Setter Property="Background" Value="#FFE6E6FA"/> 
               </Style> 
              </Grid.Style> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="Auto" /> 
               <ColumnDefinition Width="Auto" /> 
              </Grid.ColumnDefinitions> 
              <Label Content="{Binding}" Width="250" /> 
              <Button Grid.Column="1" Command="{Binding AddCommandButton, ElementName=root}" 
               CommandParameter="{Binding}">+</Button> 
             </Grid> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Favorite}" Value="False"> 
           <Setter Property="Content"> 
            <Setter.Value> 
             <Grid> 
              <Grid.Style> 
               <Style TargetType="Grid"> 
                <Setter Property="Background" Value="Yellow"/> 
               </Style> 
              </Grid.Style> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="Auto" /> 
               <ColumnDefinition Width="Auto" /> 
              </Grid.ColumnDefinitions> 
              <Label Content="{Binding}" Width="250" /> 
              <Button Grid.Column="1" Command="{Binding RemoveCommandButton, ElementName=root}" 
               CommandParameter="{Binding}">-</Button> 
             </Grid> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </ContentControl> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

ソースバインディングは、クライアントが好きなフィールドを持っていると表示するようになっているObservableCollecitonが含まれています別の背景と別のボタンがあります。私はコンボボックスを開いたときしかし、すべての項目があります

「System.Windows.Styles」

答えて

3

あなたの問題はあなたがコンテンツコントロール内のコンテンツとしてのスタイルを設定しているです。あなたが追加する必要があり、コンテンツコントロールのスタイルを設定するために

<ContentControl> 
    <Style TargetType="ContentControl"> 
    ... 
    </Style> 
</ContentControl> 

<ContentControl>  
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
     ... 
     </Style>  
    <ContentControl.Style> 
</ContentControl> 

EDIT

で:

<ContentControl.Style> 

したがって、上記のコードは次のようになります。背景を変更する簡単な作業のためにコードが非常に複雑になる方法。ここでは単純化したバージョンです。私の場合は

<ComboBox.ItemTemplate> 
     <DataTemplate> 
      <Grid Name="PART_GRID" Background="Yellow"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Label Content="{Binding}" 
         Width="250" /> 
       <Button Name="PART_BUTTON" 
         Grid.Column="1" 
         Content="-" 
         Command="{Binding AddCommandButton, ElementName=root}" 
         CommandParameter="{Binding}" /> 
      </Grid> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Favorite}" 
          Value="True"> 
        <Setter TargetName="PART_GRID" 
          Property="Background" 
          Value="#FFE6E6FA" /> 
        <Setter TargetName="PART_BUTTON" 
          Property="Content" 
          Value="+" /> 
        <Setter TargetName="PART_BUTTON" 
          Property="Command" 
          Value="{Binding RemoveCommandButton, ElementName=root}" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
+0

助けてくれてありがとう!それはそれだった。今すぐFavorite = Trueのアイテムがリストに正しく表示されています。 「偽」の領域はすべて白い内容を表示しますが、選択するとOKと表示されます。なぜなのかご存知ですか? –

+0

@AndreRoqueあなたのコードでなぜ動作しないのか分かりません。しかし、私はそれを単純化し、ブール値のコレクションでテストした例を追加しました。 –

+0

問題は、状況ごとに2つの異なるボタンがあることです。そのコードを編集しました –

0

、私は私が持っていたことが分かった:直接上記溶液に類似している項目として、スタイルを追加して

<ComboBox> 
    <Style> 
    </Style> 
</ComboBox> 

関連する問題