我有一个按钮列表的设置,这些按钮在应用程序启动时显示最近的项目文件路径。此时,仍然存在的文件路径仍然可以点击,并且找不到的文件路径不可点击。但是,我想修改现有代码,使不存在的文件路径不可分割并具有不同的背景颜色。我怎么会优雅地做到这一点?
<Grid.Resources>
<Style TargetType="Button" x:Key="OpenProjectButtonStyle">
<Setter Property="Command" Value="{Binding Command, Converter={StaticResource ObjectToCommandConverter}}" />
<Setter Property="ToolTip" Value="{Binding ToolTipDescription}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="ButtonWrapper" Background="Transparent" Cursor="Hand">
<StackPanel Orientation="Horizontal" Margin="5">
<Image Source="{Binding LargeImageUrl}" Stretch="None" Margin="0,0,5,0" />
<StackPanel>
<TextBlock Name="LabelText" Text="{Binding Label}"
Foreground="{StaticResource SelectedForeground}"
FontSize="13" />
<TextBlock Text="{Binding ToolTipDescription}"
Foreground="#616161"
FontSize="11" />
</StackPanel>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ButtonWrapper" Property="Background" Value="{StaticResource Background}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
我假设我想在前几个Setter中做一个绑定/转换,但我还是不确定如何。这就是我目前在转换课中所拥有的内容:
class CommandEnabledToBackgroundConverter : IValueConverter
{
public String Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool) value) //if command.Enabled is true
{
return "Gray";
}
else
{
return "LightGray";
}
}
public bool ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.Equals("Gray")) //if command.Enabled is true
{
return true;
}
else
{
return false;
}
}
}
答案 0 :(得分:2)
您需要返回画笔而不是字符串:
class CommandEnabledToBackgroundConverter : IValueConverter
{
public String Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool) value) //if command.Enabled is true
{
return new SolidColorBrush(Colors.Gray);
}
else
{
return new SolidColorBrush(Colors.LightGray);
}
}
public bool ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
您通常在XAML中使用的字符串会隐式转换为画笔,但对于转换器,这不会发生
答案 1 :(得分:0)
我只会使用一个触发器,你的转换器是正确的,但在这种情况下不需要使用它。
<Trigger Property=Enabled Value=True>
<Trigger.Setters>
<Setter Property=Background Value=Gray />
</Trigger.Setters>
</Trigger>
然后只需将默认背景颜色设置为LightGray。