0

IsEnabled および IsChecked プロパティのマルチトリガーがあります。チェックボックスが無効になった後、コードで再度有効にならないことを除いて、うまく機能しています。XAML は次のとおりです。

<ListView ScrollViewer.ScrollChanged="lstRewardsEarned_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}">

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

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

            <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 highlighting 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>
    </ListView.ItemContainerStyle>
</ListView>

これは、チェックボックスを再度有効にするコードです。

For Each checkBox As CheckBox In lstRewardsEarned.Items
    checkBox.IsEnabled = true

    'This writes out false!
    Console.WriteLine(checkBox.IsEnabled)
Next

前もって感謝します。

4

1 に答える 1

0

UpdateSourceTriggerをIsEnabledおよびIsSelectedプロパティバインディングから削除しますか?

MSDNによると

UpdateSourceTrigger値をExplicitに設定した場合は、UpdateSourceメソッドを呼び出す必要があります。そうしないと、変更がソースに反映されません。

于 2013-03-19T12:48:31.147 に答える