2017-03-08 14 views
1

こんにちは私はWPFプログラムを作成しています。しかし、私はコンボボックスに問題がありますコンボボックスにスタイルを適用した後にComboBoxItemが表示されない

私はこのコードのようなコンボボックススタイルが必要です。

<ComboBox Height="28" Background="White" VerticalContentAlignment="Center" Width="120"> 
    <ComboBox.BorderBrush> 
     <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute"> 
      <GradientStop Color="#FFABADB3" Offset="0.05"/> 
      <GradientStop Color="#FFE2E3EA" Offset="0.07"/> 
     </LinearGradientBrush> 
    </ComboBox.BorderBrush> 
    <ComboBoxItem Content="Content1" IsSelected="True"/> 
    <ComboBoxItem Content="Content2"/> 
</ComboBox> 

このコードはうまくいきます。

スタイルとビューを分割した後、このコードは機能しません。

実際、ComboBoxに適用されるスタイルは表示されませんが、ComboBoxItemsは表示されません。

何が問題ですか?

スタイル一部

<Style x:Key="ComboBoxLikeTextBox" TargetType="{x:Type ComboBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ComboBox"> 
       <ComboBox Height="28" Background="White" VerticalContentAlignment="Center"> 
        <ComboBox.BorderBrush> 
         <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute"> 
          <GradientStop Color="#FFABADB3" Offset="0.05"/> 
          <GradientStop Color="#FFE2E3EA" Offset="0.07"/> 
         </LinearGradientBrush> 
        </ComboBox.BorderBrush> 
       </ComboBox> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

表示一部

<ComboBox Style="{DynamicResource ComboBoxLikeTextBox}"> 
    <ComboBoxItem Content="Content1" IsSelected="True"/> 
    <ComboBoxItem Content="Content2"/> 
</ComboBox> 

答えて

0

ですから、唯一のセッターで、全体のスタイルを作成します。そしてそのコンボボックスのコンボボックスを、コンボボックスを含むテンプレートで置き換えます。コンボボックスは、あなたが望むすべてのプロパティを持ちますが、プレビューされたコンボボックスの子を自分自身に移入することはありません。もちろん、そのコンボボックスには子供がいません。あなたは決してそれを与えませんでした。そして、高さとその他のものを設定するだけで、新しいテンプレートを作成する必要はありません。テンプレートは大砲ですので、このようなシンプルなスタイルには必要ありません。

使用スタイルのセッターを使用すると、全体の制御をNukeのために、設定されていませんしたいプロパティを設定します。そのような:

<Style TargetType="ComboBox" x:Key="ComboBoxLikeTextBox"> 
    <Setter Property="Height" Value="28" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
    <Setter Property="Width" Value="120" /> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute"> 
       <GradientStop Color="#FFABADB3" Offset="0.05"/> 
       <GradientStop Color="#FFE2E3EA" Offset="0.07"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 
+1

はどうもありがとうございました!それは非常に便利です! –

関連する問題