xaml - 首次绘制控件后,Xamarin.Forms ControlTemplate 绑定失败
问题描述
我有一个ControlTemplate
修改 Xamarin.Forms 中单选按钮的外观。
我从https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/radiobutton#redefine-radiobutton-appearance借用/更新了它
它看起来很棒,并且在创建页面时外观很完美。
我希望单选按钮中的图像根据绑定进行更改,但它不会这样做。
绑定属性被修改,OnPropertyChanged()
被调用,但绑定没有被触发。
这是一般外观(其中两个RadioButton
并排)
同样,外观和Converter
一切都可以正常工作,但仅在第一次绘制页面时。
这是控制模板
<ControlTemplate x:Key="RadioButtonTemplate">
<Frame
BackgroundColor="#30888888"
HasShadow="False"
HeightRequest="{TemplateBinding HeightRequest}"
WidthRequest="{TemplateBinding WidthRequest}"
HorizontalOptions="Start"
VerticalOptions="StartAndExpand"
Padding="0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroupList>
<VisualStateGroup x:Name="CheckedStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter Property="BorderColor" Value="Accent" />
<Setter TargetName="check"
Property="Opacity"
Value="1" />
<Setter TargetName="checkrim"
Property="Opacity"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Unchecked">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="{DynamicResource TransparentBackgroundColour}" />
<Setter Property="BorderColor" Value="Transparent" />
<Setter TargetName="check"
Property="Opacity"
Value="0" />
<Setter TargetName="checkrim"
Property="Opacity"
Value="0" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</VisualStateManager.VisualStateGroups>
<Grid Margin="4"
WidthRequest="100">
<ContentPresenter Margin="6" />
<Grid WidthRequest="20"
HeightRequest="20"
Padding="0"
HorizontalOptions="Start"
VerticalOptions="Start">
<Ellipse x:Name="unckecd"
Stroke="White"
StrokeThickness="2"
Fill="Transparent"
Margin="0"
WidthRequest="20" HeightRequest="20"
HorizontalOptions="Center" VerticalOptions="Center" />
<Ellipse x:Name="checkrim"
Stroke="Accent"
StrokeThickness="2"
Fill="Transparent"
Margin="0"
WidthRequest="20" HeightRequest="20"
HorizontalOptions="Center" VerticalOptions="Center" />
<Ellipse x:Name="check"
Fill="Accent"
Margin="1,1,0,0"
WidthRequest="10" HeightRequest="10"
HorizontalOptions="Center" VerticalOptions="Center" />
</Grid>
</Grid>
</Frame>
</ControlTemplate>
而Style
我的RadioButton
<Style x:Key="FancyRadioButton" TargetType="RadioButton">
<Setter Property="ControlTemplate"
Value="{DynamicResource RadioButtonTemplate}" />
</Style>
和我的RadioButton
<RadioButton Style="{StaticResource FancyRadioButton}"
Value="{x:Static gdl90Types:UdpTransmitMode.UdpUnicast}"
WidthRequest="150"
HeightRequest="103">
<RadioButton.Content>
<StackLayout VerticalOptions="Start" Spacing="0" Margin="0, -3">
<Image Source="{Binding Source=ColourPresetSetting,
ConverterParameter=unicast,
Converter={StaticResource ResourceImageFromThemeConverter}}"
Margin="22,0"
Aspect="AspectFit"
/>
<Label Text="UDP UNICAST" TextColor="{DynamicResource MediumContrastTextColour}" />
</StackLayout>
</RadioButton.Content>
我想要的只是Image
通知RadioButton
属性ColourPresetSetting
变化,更新图像。
它在第一次绘制时会这样做,但之后就不会了。
我错过了一些明显的东西吗?
解决方案
推荐阅读
- jquery - 带有悬停的jquery只触发一次问题
- python - 带有 QSortFilterProxyModel 的 QAbstractItemModel 中的 InsertRows
- javascript - 在 Qualtrics 中使用 Chart.js 的可拖动条形图
- ios - 当我们不指定时,哪个队列用于执行任务?
- java - 如何修改 Ford-Fulkerson 最大流算法来打印访问过的节点?
- c# - 如何使用 Dapper 从查询中获取返回值?
- spring-boot - Google Cloud App Engine + H2 持久化 + Spring boot JPA
- powershell - Powershell 单例和 $this 行为
- ibm-mq - 如何为 mq 配置回退队列?
- mysql - 没有按基金分组的MySQL查询