我正在尝试在加载用户控件时动态设置一个在
我确定这是因为我定义了错误的绑定方式,但我无法找出需要做出哪些不同的更改才能使其正常工作。
App.xaml
中定义的样式,但某些原因导致样式未能应用(即没有发生错误,只是未应用样式)。我确定这是因为我定义了错误的绑定方式,但我无法找出需要做出哪些不同的更改才能使其正常工作。
App.xaml 样式
我想要的样式是RunningTitleBlock
,它由我在下面的代码示例中包含的几个其他样式组成。<Style TargetType="Label">
<Setter Property="Margin" Value="4"/>
</Style>
<Style TargetType="Label"
BasedOn="{StaticResource {x:Type Label}}"
x:Key="HeaderBlock">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<Style TargetType="Label"
BasedOn="{StaticResource ResourceKey=HeaderBlock}"
x:Key="TitleBlock">
<Setter Property="Foreground" Value="Black"/>
</Style>
<Style TargetType="Label"
BasedOn="{StaticResource ResourceKey=TitleBlock}"
x:Key="RunningTitleBlock">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.0, 0.5"
EndPoint="1.0, 0.5">
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="Green" Offset="1.0"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
用户控件的绑定
我试图让绑定
绑定到从值转换器返回的值。
Style="{DynamicResource ResourceKey={Binding Path=MonitoringType, Converter={StaticResource TSConverter}}}"
代码
MonitoringTypes 枚举
public enum MonitoringTypes
{
Running,
Failed,
Paused,
Favorites,
}
用户控件
这里我想做的是将传入的MonitoringTypes
枚举值的字符串值与一些已知文本连接起来,以构建在App.xaml
中存在的样式名称。值转换器被调用并且返回了正确的值,但由于某种原因样式没有应用。
/// <summary>
/// Interaction logic for MonitorWorkflow.xaml
/// </summary>
public partial class MonitorWorkflow : UserControl
{
public MonitorWorkflow(MonitoringTypes monitoringType)
{
InitializeComponent();
this.DataContext = new MonitorWorkflowViewModel { MonitoringType = monitoringType };
}
}
public class MonitorWorkflowViewModel
{
public MonitoringTypes MonitoringType { get; set; }
}
public class TitleStyleValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var type = (MonitoringTypes)value;
return string.Format("{0}TitleBlock", Enum.GetName(typeof(MonitoringTypes), type));
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Enum.Parse(typeof(MonitoringTypes), value.ToString().Substring(0, value.ToString().IndexOf("TitleBlock")));
}
}