Почему флажок теряет привязку IsChecked после взаимодействия с ним пользователя? - PullRequest
2 голосов
/ 08 марта 2012

Обновление: эта проблема подтверждена и исправлена ​​в .NET 4.0 (я использовал 3.5).

Я пытаюсь использовать флажок, чтобы он мог быть установлен вручнуюпользователь, если у выпадающего списка в том же самом окне нет определенного значения (в этом случае флажок не установлен и не установлен).

Это работает идеально, пока пользователь не установит / не установит флажок вручную.После этого установщик IsChecked = True перестает работать при изменении значения в выпадающем списке.Установщик IsEnabled = False продолжает работать, как и ожидалось.

В итоге мне пришлось использовать некоторую логику в коде, когда я надеялся, что это будет возможно с использованием чистого Xaml.

Кто-нибудь знает, если это ошибка или предполагаемое поведение.И если да, то почему?

<CheckBox>
Some text here
<CheckBox.Style>
    <Style TargetType="{x:Type CheckBox}">
        <Setter Property="IsChecked" Value="False" />
        <Setter Property="IsEnabled" Value="True" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=SelectedValue, ElementName=comboBox1, Mode=OneWay}" Value="Disable Checkbox">
                <Setter Property="IsChecked" Value="True" />
                <Setter Property="IsEnabled" Value="False" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</CheckBox.Style>
</CheckBox>

Спасибо.

1 Ответ

2 голосов
/ 08 марта 2012

что-то еще происходит в вашем проекте.

Я попробовал следующее:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Name="Window"
        SizeToContent="WidthAndHeight">
    <StackPanel>
        <CheckBox>
            some text here
            <CheckBox.Style>
                <Style TargetType="{x:Type CheckBox}">
                    <Setter Property="IsChecked" Value="False" />
                    <Setter Property="IsEnabled" Value="True" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=SelectedIndex, ElementName=combo, Mode=OneWay}" Value="2">
                            <Setter Property="IsChecked" Value="True" />
                            <Setter Property="IsEnabled" Value="False" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>
        <ComboBox Name="combo">
            <TextBlock>item 1</TextBlock>
            <TextBlock>item 2</TextBlock>
            <TextBlock>item 3</TextBlock>
            <TextBlock>item 4</TextBlock>
            <TextBlock>item 5</TextBlock>
        </ComboBox>
    </StackPanel>
</Window>

Так очень просто. Цель здесь - установить точно такие же значения, как у вас, для IsEnable и IsChecked, когда элемент 3 выбран в поле со списком

и это работает как шарм. То есть: пользователь устанавливает / снимает флажок по своему усмотрению, затем, когда он выбирает «элемент 3» в поле со списком, флажок проверяется и отключается. Если он снова меняет выбранный элемент в поле со списком, флажок снят и повторно включен, и он может проверять / снимать флажок снова и снова.

Так что для вас что-то еще происходит. То, что вы написали, должно работать.

Редактировать: Что касается вашего комментария, я протестировал версию 3.5 вместо 4.0, которую я впервые использовал, и действительно мог воспроизвести вашу проблему, так что это явно ошибка, исправленная в 4.0 версия .net Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...