使用值转换器将复选框绑定到标签字体粗细
Bind checkbox to label fontweight with value converter
我想制作具有依赖于复选框的 FontWeight 属性的标签。
如果选中复选框,则标签字体粗细为粗体,如果未选中,则字体粗细为正常。我决定将 Label 中的 FontWeight 属性与 Checkbox 绑定并添加转换器。
这是我想要实现的屏幕(选中粗体时,底部的文本应加粗)
enter image description here
我创建了所有的逻辑和绑定,但是当我点击粗体复选框时没有任何反应。
这是我目前的情况
MainWindow.xaml
<Window ...
...
<Window.Resources>
<local:BoolToStringConverter x:Key="custom" TrueValue="Bold" FalseValue="Normal" />
</Window.Resources>
<Grid>
...
<CheckBox Name="BoldField" Margin="5" FontWeight="Bold">Bold</CheckBox>
<Label Name="text" Grid.Row="3" Grid.ColumnSpan="3"
FontWeight="{Binding BoldField, Converter={StaticResource custom}}" />
...
</Window>
MainWindow.xaml.cs
namespace Wpf03
{
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
public class BoolToStringConverter : BoolToValueConverter<FontWeight> { }
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
我尝试了不同的转换器但没有结果。为什么我的转换器从未被调用过?有什么想法吗?
您正在传递 CheckBox
的 Name
作为绑定路径
相反,您需要指定 IsChecked
属性:
<CheckBox Name="BoldField" Margin="5" FontWeight="Bold">Bold</CheckBox>
<Label Name="text" Grid.Row="3" Grid.ColumnSpan="3"
FontWeight="{Binding ElementName=BoldField, Path=IsChecked, Converter={StaticResource custom}}" />
我想制作具有依赖于复选框的 FontWeight 属性的标签。
如果选中复选框,则标签字体粗细为粗体,如果未选中,则字体粗细为正常。我决定将 Label 中的 FontWeight 属性与 Checkbox 绑定并添加转换器。
这是我想要实现的屏幕(选中粗体时,底部的文本应加粗)
enter image description here
我创建了所有的逻辑和绑定,但是当我点击粗体复选框时没有任何反应。
这是我目前的情况
MainWindow.xaml
<Window ...
...
<Window.Resources>
<local:BoolToStringConverter x:Key="custom" TrueValue="Bold" FalseValue="Normal" />
</Window.Resources>
<Grid>
...
<CheckBox Name="BoldField" Margin="5" FontWeight="Bold">Bold</CheckBox>
<Label Name="text" Grid.Row="3" Grid.ColumnSpan="3"
FontWeight="{Binding BoldField, Converter={StaticResource custom}}" />
...
</Window>
MainWindow.xaml.cs
namespace Wpf03
{
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
public class BoolToStringConverter : BoolToValueConverter<FontWeight> { }
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
我尝试了不同的转换器但没有结果。为什么我的转换器从未被调用过?有什么想法吗?
您正在传递 CheckBox
的 Name
作为绑定路径
相反,您需要指定 IsChecked
属性:
<CheckBox Name="BoldField" Margin="5" FontWeight="Bold">Bold</CheckBox>
<Label Name="text" Grid.Row="3" Grid.ColumnSpan="3"
FontWeight="{Binding ElementName=BoldField, Path=IsChecked, Converter={StaticResource custom}}" />