Ниже приведена полная разметка XAML (код не требуется): Window
с Grid
с DataGrid
с одним столбцом типа DataGridComboBoxColumn
с его Header
и EditingElementStyle
свойства установлены в XAML
.EditingElementStyle
устанавливает ItemContainerStyle
и ItemsSource
ComboBox
es.Когда я нажимаю ComboBoxItem
, раскрывающийся список не закрывается, и мне нужно закрыть его.
Я попытался удалить все содержимое элемента DataGridComboBoxColumn
, и раскрывающийся список там, пустойно не исчезает при нажатии на него.
Раскрывающийся список также исчезает, когда я щелкаю вне раскрывающегося списка.
Если я просто добавлю это в простое Window
:
<ComboBox>
<ComboBoxItem>a</ComboBoxItem>
<ComboBoxItem>b</ComboBoxItem>
<ComboBoxItem>c</ComboBoxItem>
</ComboBox>
работает.
XAML
<Window x:Class="cs_wpf_test_11.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:cs_wpf_test_11"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="TestWindow" Height="450" Width="800">
<Grid>
<DataGrid AutoGenerateColumns="False">
<DataGrid.ItemsSource>
<x:Array Type="{x:Type sys:String}">
<sys:String>dummy 1</sys:String>
<sys:String>dummy 2</sys:String>
</x:Array>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridComboBoxColumn Header="My only column">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ComboBoxItem Content="{Binding}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="ItemsSource">
<Setter.Value>
<x:Array Type="{x:Type sys:String}">
<sys:String>test 1</sys:String>
<sys:String>test 2</sys:String>
<sys:String>test 3</sys:String>
<sys:String>test 4</sys:String>
</x:Array>
</Setter.Value>
</Setter>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Ожидается: раскрывающееся меню ComboBox
закрывается, когда я нажимаю на одну из ComboBoxItem
s.,Фактический результат: раскрывающийся список остается открытым.
Обновление
Я хочу использовать установщик ItemContainerStyle, потому что я изменяю FontStyle некоторых ComboBoxItem-ов на основе привязки.Это код из более крупного проекта:
<ComboBoxItem FontStyle="{Binding Path=Style}" Content="{Binding Text}"/>
На основании принятого ответа я использую этот код для того же эффекта, и проблема решена:
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<Setter Property="FontStyle" Value="{Binding Style}"/>
</Style>
</Setter.Value>
</Setter>