Проблемы с шаблоном ComboBox в WPF - PullRequest
3 голосов
/ 03 декабря 2008

У меня есть список с DataTemplate, который имеет ComboBox. Я хочу, чтобы ComboBox выглядел плоско, как метка, пока пользователь не захочет изменить значение. Раньше у меня был приведенный ниже пример, но я немного изменил положение вещей, и теперь это больше не работает, и я не уверен, почему.

Кажется, что свойство IsMouseOver работает неправильно, поскольку оно устанавливается только тогда, когда мышь находится на границе элемента управления.

Что я могу сделать, чтобы это работало правильно?

Вот фрагмент:

</p> <pre><code> <CollectionViewSource x:Key="AccountCategories" /> <ControlTemplate x:Key="FlatCombo" TargetType="{x:Type ComboBox}"> <ContentControl Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="4,3,3,3" /> </ControlTemplate> <Style TargetType="{x:Type ComboBox}" x:Key="DropDown"> <Setter Property="OverridesDefaultStyle" Value="False" /> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="False" /> <Condition Property="IsFocused" Value="False"/> </MultiTrigger.Conditions> <Setter Property="Template" Value="{StaticResource FlatCombo}" /> </MultiTrigger> </Style.Triggers> </Style> <DataTemplate x:Key="Category"> <ComboBox IsSynchronizedWithCurrentItem="False" Style="{StaticResource DropDown}" ItemsSource="{Binding Source={StaticResource db}, Path=Categories}" DisplayMemberPath="Name" SelectedValuePath="Id" SelectedValue="{Binding Path=Category}" /> </DataTemplate> </Window.Resources> <Grid> <ListView Margin="0,110,0,0" Name="lstCategories" ItemsSource="{Binding Source={StaticResource AccountCategories}}" Grid.RowSpan="2"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView> <GridViewColumn Header="Category" Width="100" CellTemplate="{StaticResource Category}" /> <GridViewColumn DisplayMemberBinding="{Binding Path=Balance}" Header="Balance" Width="100" /> </GridView> </ListView.View> </ListView>

Ответы [ 2 ]

2 голосов
/ 03 декабря 2008

Я взял предоставленный вами код, предоставил некоторые данные для коллекций, и они работали так, как вы этого хотели. Я бы предложил использовать Snoop , чтобы посмотреть, есть ли другие элементы, потребляющие события, которые, как вы ожидаете, обрабатывает ListView.

0 голосов
/ 03 декабря 2008

Обычно, когда у вас возникают проблемы с корректным срабатыванием событий мыши, это происходит из-за отсутствия фона. Если элемент, который вы ожидаете получить события, имеет нулевую ссылку для фона, элемент управления не будет получать события; только контроль под ним будет. Попробуйте установить фон вашего ContentControl на «Прозрачный». Это должно исправить вашу проблему.

...