Изменить свойство IsChecked для ChangePropertyAction [uwp] - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно изменить свойство IsChecked для радиокнопки по щелчку простой кнопки в XAML, используя ChangePropertyAction .
Я могу изменить каждое свойствопереключатель (Content, Visibility и т. д.) с помощью этого метода, кроме IsChecked, и он дает неназванную ошибку.

<Button x:Name="button1">
    <Interactivity:Interaction.Behaviors>
        <Core:EventTriggerBehavior EventName="Click" SourceObject="{Binding ElementName=button1}">
            <Core:ChangePropertyAction TargetObject="{Binding ElementName=radio1}" PropertyName="IsChecked" Value="false"/>
        </Core:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</Button>

Могу ли я узнать причину и решение, пожалуйста?Спасибо.

1 Ответ

1 голос
/ 17 мая 2019

Проблема возникает из-за этого, свойство ischecked флажка наследуется от его базового класса ToggleButton.И это значение Nullable (см. Подробности из этого doc ).И именно поэтому он сообщает об исключении, подобном следующему:

Windows.UI.Xaml.Markup.XamlParseException: текст, связанный с этим кодом ошибки, не найден.ожидается имя [Строка: 1 Позиция: 175] в Windows.UI.Xaml.Markup.XamlReader.Load (String xaml) в Microsoft.Xaml.Interactions.Core.TypeConverterHelper.Convert (строковое значение, String destinationTypeFullName)

Чтобы решить эту проблему, попробуйте создать конвертер самостоятельно:

 public class NullReaderConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Затем на вашем XAML попробуйте следующее:

 <Grid>
    <Grid.Resources>
        <local:NullReaderConverter x:Name="myconverter"/>
        <x:Boolean x:Key="falsevalue">false</x:Boolean>
    </Grid.Resources>
    <RelativePanel>
        <CheckBox Content="test1" x:Name="radio1" IsChecked="True"></CheckBox>
        <Button x:Name="button1" Content="change" RelativePanel.Below="radio1">
            <Interactivity:Interaction.Behaviors>
                <Interactions:EventTriggerBehavior EventName="Click" SourceObject="{Binding ElementName=button1}">
                    <Interactions:ChangePropertyAction TargetObject="{Binding ElementName=radio1}" PropertyName="IsChecked" Value="{Binding Converter={StaticResource myconverter},Source={StaticResource falsevalue}}"/>
                </Interactions:EventTriggerBehavior>
            </Interactivity:Interaction.Behaviors>
        </Button>
    </RelativePanel>

</Grid>
...