2

私は2つ持っていComboBoxesます。1つは列挙値のリストにバインドされ、もう1つはカスタムクラスオブジェクトのリストにバインドされ、DisplayMemberPathプロパティが設定されています。

列挙値へのComboBoxバインドは暗黙的TextBlockなスタイルを適用しますが、プロパティComboBoxを使用するは適用DisplayMemberPathしません。

Snoopを使用すると、両方ComboBoxesがまったく同じコントロールのセット(を<ContentPresenter>含む<TextBlock>)でレンダリングされることを確認できますがTextBlock、セットを含まComboBoxない場合は5が含まれ、セットを含む場合は含まれません。DisplayMemberPathMarginDisplayMemberPath

<Grid.Resources>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="Margin" Value="5" />
    </Style>
</Grid.Resources>

<ComboBox Grid.Row="0" Grid.Column="1" 
          ItemsSource="{Binding EnumCollection}" 
          SelectedItem="{Binding SelectedEnum}" />

<ComboBox Grid.Column="1" Grid.Row="2" 
          ItemsSource="{Binding SomeCollection}" 
          SelectedItem="{Binding SelectedItem}"
          DisplayMemberPath="Name" />

スクリーンショット

どうしてこれなの?ComboBoxそして、列挙型が暗黙TextBlockのスタイルを継承しないようにするにはどうすればよいですか?

4

1 に答える 1

2

私の仮定では、はDisplayMemberPathを作成しDataTemplate、スタイルはそのスコープ内に適用されません。

DisplayMemberPath="."最初に含むをComboBox使用するように設定してみてください。これにより、暗黙のスタイルが適用されなくなります。DataTemplate<TextBlock Text="{Binding .}">

于 2012-08-30T19:48:04.837 に答える