3

ComboBox を持つ DataTemplate のリストビューがあります。ユーザーが実際に値を変更するまで、ComboBox をラベルのように平らに見せたいと思います。以前は以下の例が機能していましたが、少し変更したため、機能しなくなり、理由がわかりません。

IsMouseOver プロパティは、マウスがコントロールの境界線にあるときにのみ設定されるため、正しく機能していないようです。

これを正しく機能させるにはどうすればよいですか?

ここにスニペットがあります:

    <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>

4

2 に答える 2

2

私はあなたが提供したコードを取り、コレクションにいくつかのデータを提供しました、そしてそれはあなたが望むように機能しました。Snoopを使用して、ListViewが処理することを期待するイベントを消費する他の要素があるかどうかを確認することをお勧めします。

于 2008-12-03T18:26:08.760 に答える
0

通常、Mouse イベントが正しく発生するという問題が発生する場合は、背景が欠落していることが原因です。イベントを受け取ると予想される要素に背景の null 参照がある場合、コントロールはイベントを受け取りません。その下にあるコントロールのみが動作します。ContentControl の背景を「透明」に設定してみてください。これで問題が解決するはずです。

于 2008-12-03T17:35:57.270 に答える