将Image触发器从XAML转换为C#标记

l7wslrjt  于 2022-12-07  发布在  C#
关注(0)|答案(1)|浏览(121)

我有一个箭头图像,当一个扩展器被展开时旋转。我试图将XAML代码转换为C#,我可以看到箭头和应用主题绑定在C#代码中工作,除了它不旋转。
示例:

<Image
    HeightRequest="25"
    HorizontalOptions="End"
    Source="{AppThemeBinding Light=down_arrow.png,
                                Dark=down_arrow_dark.png}"
    VerticalOptions="Start">
    <Image.Triggers>
        <DataTrigger
            Binding="{Binding Source={RelativeSource AncestorType={x:Type mct:Expander}}, Path=IsExpanded}"
            TargetType="Image"
            Value="True">
            <Setter Property="Rotation" Value="180" />
        </DataTrigger>
    </Image.Triggers>
</Image>

目前的C#程式码:

var arrowImage = new Image()
{
    Triggers = 
    {
        new DataTrigger(typeof(Image))
        {
            Value = true,
            Binding = new Binding(nameof(expander.IsExpanded)),
            Setters =
            {
                new Setter()
                {
                    Property = Image.RotationProperty,
                    Value = 180
                }
            }
        }
    },
    HeightRequest = 25,
    HorizontalOptions = LayoutOptions.End,
};
arrowImage.SetAppTheme<FileImageSource>(Image.SourceProperty, "down_arrow.png", "down_arrow_dark.png");
cdmah0mi

cdmah0mi1#

我必须设置Source并为Value = false设置一个触发器,使其与XAML的行为相同。

var arrowImage = new Image()
{
    Triggers = 
    {
        new DataTrigger(typeof(Image))
        {
            Value = true,
            Binding = new Binding(nameof(expander.IsExpanded), BindingMode.Default, null, null, null, expander),
            Setters =
            {
                new Setter()
                {
                    Property = Image.RotationProperty,
                    Value = 180
                }
            }
        },
        new DataTrigger(typeof(Image))
        {
            Value = false,
            Binding = new Binding(nameof(expander.IsExpanded), BindingMode.Default, null, null, null, expander),
            Setters =
            {
                new Setter()
                {
                    Property = Image.RotationProperty,
                    Value = 0
                }
            }
        },
    },
    HeightRequest = 25,
    HorizontalOptions = LayoutOptions.End,
};

相关问题