我有一个奇怪的问题,我正在尝试设置SingleUpDown控件的样式(来自Extended WPF Toolkit)
这是不工作的当前风格:
<xctk:SingleUpDown>
<xctk:SingleUpDown.Style>
<Style TargetType="xctk:SingleUpDown">
<Style.Triggers>
<DataTrigger Binding="{Binding _ThresoldLocked}" Value="True">
<Setter Property="Value" Value="2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</xctk:SingleUpDown.Style>
</xctk:SingleUpDown>
虽然这两个例子像魅力一样:
<xctk:SingleUpDown>
<xctk:SingleUpDown.Style>
<Style TargetType="xctk:SingleUpDown">
<Style.Triggers>
<DataTrigger Binding="{Binding _ThresoldLocked}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</xctk:SingleUpDown.Style>
</xctk:SingleUpDown>
或者
<xctk:SingleUpDown>
<xctk:SingleUpDown.Style>
<Style TargetType="xctk:SingleUpDown">
<Setter Property="Value" Value="2"/>
</Style>
</xctk:SingleUpDown.Style>
</xctk:SingleUpDown>
第一种风格我做错了什么? 输出窗口中没有错误..
编辑: 这是我极简主义的例子: http://i.stack.imgur.com/EzxBP.png
答案 0 :(得分:1)
通常,当涉及到样式和触发器时,人们不了解precedence,即本地值等完全覆盖样式。鉴于您没有在控件上设置任何属性,所有样式应该工作。
例如,如果您在控件上设置Value
(<xctk:SingleUpDown Value="0">...
),则触发器不会执行任何操作,您可以将默认值移至Setter
。
<xctk:SingleUpDown>
<xctk:SingleUpDown.Style>
<Style TargetType="xctk:SingleUpDown">
<Setter Property="Value" Value="<default here>"/>
<Style.Triggers>
<DataTrigger Binding="{Binding _ThresoldLocked}" Value="True">
<Setter Property="Value" Value="2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</xctk:SingleUpDown.Style>
</xctk:SingleUpDown>
修改强>
我对控件的行为进行了观察。如果您有如上所示的设置,则触发器将起作用,因此默认设置器在此处是必要的。
此外,您应该注意,操纵该值可能会在本地设置它,从而覆盖触发器的任何进一步影响。您可以通过使用动画而不是触发器来解决这个问题,因为它们具有最高优先级,但是这可能会使任何手动操作无效。
也许您应该将逻辑从UI移开,并将Value
直接绑定到视图模型/模型上的属性,例如。
private bool _ThresholdLocked;
public bool ThresholdLocked
{
get { return _ThresholdLocked; }
set
{
if (value != _ThresholdLocked)
{
_ThresholdLocked= value;
OnPropertyChanged("ThresholdLocked");
OnPropertyChanged("Value"); //Value is also affected
}
}
}
private float _Value;
public float Value
{
get
{
if (ThresholdLocked)
return 2.0f;
return _Value;
}
set
{
if (value != _Value)
{
_Value = value;
OnPropertyChanged("Value");
}
}
}
答案 1 :(得分:0)
我使用的是Extended WPF Toolkit,但我没有SingleUpDown
,但您可能正在讨论的不同版本是:http://wpftoolkit.codeplex.com/。我有DoubleUpDown
,你的非功能风格适合我。