0

私はWPFの初心者です。WPF のリストビューにチェックボックスのリストがあります。ユーザーがチェックボックスをクリックすると、行が強調表示される機能があります。すべて正常に動作しています。ただし、チェックボックスが無効になっている場合でも、行が強調表示され、チェックボックスもチェックされます。ユーザーが無効なチェックボックスをクリックしたときに強調表示またはチェックしないようにするにはどうすればよいですか? 前もって感謝します。

<ListView ScrollViewer.ScrollChanged="lstRewardsExpiration_ScrollChanged" Height="178" HorizontalAlignment="Left" Margin="12,0,0,81" Name="lstRewardsEarned" VerticalAlignment="Bottom" Width="327" SelectionMode="Multiple" Background="White" FontFamily="Calibri" FontSize="16">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay}" />

            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="Border" SnapsToDevicePixels="true">
                            <ContentPresenter />
                        </Border>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="Border" Property="Background" Value="Cyan"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="Transparent"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
4

1 に答える 1

1

MultiTriggerこれを機能させるには、 a を使用する必要がある場合があります

あなたの質問を正しく読んだ場合の例を次に示します

 <Style TargetType="{x:Type ListViewItem}">
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay}" />

    <!-- bind content IsEnabled to the ListViewItem IsEnabled -->
    <Setter Property="IsEnabled" Value="{Binding Path=IsEnabled, Mode=TwoWay}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="Border" SnapsToDevicePixels="true">
                    <ContentPresenter />
                </Border>

                <ControlTemplate.Triggers>

                    <!--Highlight if IsSelected and IsEnabled-->
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="True"/>
                            <Condition Property="IsEnabled" Value="True"/>
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter TargetName="Border" Property="Background" Value="Cyan"/>
                        </MultiTrigger.Setters>
                    </MultiTrigger>

                    <!--Remove highlight if is not Selected and IsEnabled-->
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="False"/>
                            <Condition Property="IsEnabled" Value="True"/>
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter TargetName="Border" Property="Background" Value="Transparent"/>
                        </MultiTrigger.Setters>
                    </MultiTrigger>

                    <!--Add a trigger to remove the higlighting if IsEnabled is changed to false-->
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="Transparent"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-03-12T21:22:50.663 に答える