有没有一种划线的方法??我正在努力实现以下目标:
我有一个具有bool属性的VievModel:
public bool HomeButtonUnderline { get; set; } = false;
然后,我想在以下函数中控制该属性:
public void Home() {
//CurrentPage = ApplicationPage.Home;
//HomeButtonForeground = new SolidColorBrush(Colors.White);
HomeButtonUnderline = true;
SettingsButtonUnderline = false;
}然后,我可以在XAML中使用此控件:
<Button>
<TextBlock Command="{Binding HomeNavCommand}" Underline="{Binding HomeButtonUnderline}"/>
</Button>问题是没有“下划线”属性,而是由“TextDecorations”处理:
<Button>
<TextBlock TextDecorations="Underline">
</Button>那么,是否有一种方法来控制下划线使用MVVM,甚至没有它?
发布于 2019-11-11 14:26:01
使用转换器将模型类型(在本例中为bool)转换为UI类型(在本例中为TextDecoration)。
public class UnderlineConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
return System.Convert.ToBoolean(value) ? TextDecorations.Underline : null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}然后在绑定中使用它(在您的窗口中创建资源之后,UserControl App.xaml或任何您认为合适的地方;对于这个示例,我只是把它放在按钮资源中)
<Button Command="{Binding HomeNavCommand}">
<Button.Resources>
<local:UnderlineConverter x:Key="UnderlineConverter" />
</Button.Resources>
<TextBlock TextDecorations="{Binding HomeButtonUnderline, Converter={StaticResource UnderlineConverter}"/>
</Button>发布于 2019-11-11 14:32:44
您可以在样式中为DataTrigger使用TextBlock:
<Button Command="{Binding HomeNavCommand}">
<TextBlock Text="Home">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding HomeButtonUnderline}" Value="True">
<Setter Property="TextDecorations" Value="Underline"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Button>发布于 2019-11-12 11:02:25
当然,处理此问题的另一种方法是使视图模型成为视图的正确类型:
public TextDecorationCollection HomeButtonUnderline { get; set; }HomeButtonUnderline已经是面向GUI的,所以您的视图模型中可能有一些代码可以从模型中分配一个值,所以它也可以从bool转换到TextDecorations.Underline。
与转换器不同,此方法将所有逻辑保存在同一个文件中,尽管转换器更可重用。它还具有易于单元测试(不像数据触发器)的优点。
https://stackoverflow.com/questions/58803032
复制相似问题