问题
我有一个按钮
,它的指令是ToggleMode
,在这个按钮里面是FontIcon
和TextBlock
.
在Styles.xaml中,当启用按钮
时,我将按钮
的前景色设置为白色,如果禁用该按钮,则将其设置为浅灰色.这导致在禁用按钮
时Textblocks
的前景色正确地改变,因为ToggleMode.CanExecute()
返回假.
但是,FontIcons
的正常 colored颜色 是淡蓝色,这是我使用Foreground
属性设置的.
当按钮
被禁用时, colored颜色 应更改为淡蓝色,以改善按钮被禁用的印象.
代码示例
布尔转换器
<local:BooleanConverter x:Key="CanExecuteToIconColorConverter">
<local:BooleanConverter.True>
<SolidColorBrush Color="{ThemeResource VividSkyBlueColor}" />
</local:BooleanConverter.True>
<local:BooleanConverter.False>
<SolidColorBrush Color="{ThemeResource PaleVividSkyBlueColor}" />
</local:BooleanConverter.False>
</local:BooleanConverter>
按钮
<按钮 Grid.Row="0" Width="150" Padding="10"
Command="{x:Bind ToggleMode, Mode=OneWay}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<FontIcon FontSize="20" Grid.Column="0"
Glyph="{StaticResource mdi_toggle_off}"
FontFamily="{StaticResource MaterialDesignIconsOutlined}"
Foreground="{ThemeResource VividSkyBlueColor}"/>
<TextBlock Grid.Column="1" Margin="10,0,0,0" Text="Toggle"/>
</Grid>
</按钮>
我所try 的
我try 使用这里给出的通用布尔转换器:How do I invert BooleanToVisibilityConverter?
设置SolidColorBrush
,将浅蓝色设置为True值,将淡蓝色设置为False值,并将My FontIcon
的Foreground
属性绑定到命令,但这不起作用.
在那之后,我try 订阅命令的CanExecuteChanged
事件,将新值保存在私有字段中并绑定到该私有字段,但这并不起作用,因为在初始化我的视图时,该命令仍然为空.
我的下一个猜测是订阅命令的属性更改事件,当这个命令被触发时,命令不应该再为空,我应该能够订阅该事件,但这看起来像是很多锅炉代码,特别是如果我有各种命令需要这样做的话.
我怎样才能更容易地做到这一点呢?
编辑1我try 将命令绑定到字体图标的方式
<FontIcon FontSize="20" Grid.Column="0"
Glyph="{StaticResource mdi_toggle_off}"
FontFamily="{StaticResource MaterialDesignIconsOutlined}"
Foreground="{x:Bind ToggleCommand, Mode=OneWay, Converter={StaticResource CanExecuteToIconColorConverter}}"/>