C# XAML:使用IValueConverter将公制转换为英制
所以我有一些XAML,允许用户控制滑块来输入高度。然后,我将一个标签绑定到此值,以向它们显示滑块的十进制值。这是度量值(cm),因此我显示了简单的数字:C# XAML:使用IValueConverter将公制转换为英制,c#,xaml,xamarin.forms,ivalueconverter,C#,Xaml,Xamarin.forms,Ivalueconverter,所以我有一些XAML,允许用户控制滑块来输入高度。然后,我将一个标签绑定到此值,以向它们显示滑块的十进制值。这是度量值(cm),因此我显示了简单的数字: <Label Text="Height (cm):" HorizontalTextAlignment="Start" /> <StackLayout x:Name="HeightSliderContainer"> <Slider x:Name="HeightSlider" Maximum="250" Min
<Label Text="Height (cm):" HorizontalTextAlignment="Start" />
<StackLayout x:Name="HeightSliderContainer">
<Slider x:Name="HeightSlider" Maximum="250" Minimum="100" Value="175" />
<Label x:Name="HeightSliderLabel" BindingContext="{x:Reference HeightSlider}" Text="{Binding Value, StringFormat='{0:F0}'}" />
</StackLayout>
你能包括你的转换器代码吗?@JesusAngulo。完成:)您在什么资源字典中定义MetricToImperialHeightTypeConverter?它是在App.xaml中还是在特定于页面的代码中?代码中是否有任何内容可能会影响HeightSliderLabelImperial的可见性?FWIW,我刚刚创建了一个新项目,复制并粘贴了XAML和Convert代码(以及使其运行的足够的其他代码),它可以按预期工作。@LDJ。你试过调试你的转换器吗?它有什么价值?
<Label Text="Height (cm):" HorizontalTextAlignment="Start" />
<StackLayout x:Name="HeightSliderContainer">
<Slider x:Name="HeightSlider" Maximum="250" Minimum="100" Value="175" />
<Label x:Name="HeightSliderLabel" BindingContext="{x:Reference HeightSlider}" Text="{Binding Value, StringFormat='{0:F0}'}" />
<Label Text="(" />
<Label x:Name="HeightSliderLabelImperial" BindingContext="{x:Reference HeightSlider}"
Text="{Binding Value, Converter={StaticResource MetricToImperialHeightTypeConverter}}" />
<Label Text=")" />
</StackLayout>
<Label x:Name="HeightLabelImperial" Text="{Binding User.HeightInCm,
Converter={StaticResource MetricToImperialHeightTypeConverter}}" />
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int cm = 0, feet = 0, inches = 0;
cm = System.Convert.ToInt32((double)value);
UnitConverter.CMToFeetAndInches(cm, out feet, out inches);
string result = $"{feet}ft {inches}in";
return result;
}