C# 在WPF中使用触发器设置对象属性
我有一个奇怪的问题,我目前正在尝试设计一个SingleUpDown控件(来自扩展WPF工具包) 这是不起作用的当前样式:C# 在WPF中使用触发器设置对象属性,c#,wpf,xaml,triggers,styles,C#,Wpf,Xaml,Triggers,Styles,我有一个奇怪的问题,我目前正在尝试设计一个SingleUpDown控件(来自扩展WPF工具包) 这是不起作用的当前样式: <xctk:SingleUpDown> <xctk:SingleUpDown.Style> <Style TargetType="xctk:SingleUpDown"> <Style.Triggers> <DataTrigger Bin
<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>
或
第一种款式我做错了什么?
输出窗口中没有错误
编辑:
这是我的极简主义例子:
我使用扩展的WPF工具包,但我没有
单一设置
,但您可能谈论的是与此不同的版本:。我有DoubleUpDown
,你的非功能性风格适合我。通常当涉及到人们不知道的风格和触发器时,即本地值和其他值完全覆盖了风格。由于您没有在控件上设置任何属性,因此所有样式都可以使用
因此,例如,如果在控件(…
)上设置值
),则触发器不会执行任何操作,然后将默认值移动到设置器
<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>
所有的样式看起来都能正常工作(与这些实例结合使用),你真的只使用了如图所示的代码吗?是的,我用截图更新了我的问题。如果我按“向上”或“向下”箭头,或者只是键入一个数字,它就可以正常工作。不。。即使是双向上向下,我也不能让它工作。。无论如何,这里可以找到SingleUpDown文档:是的。我也发现了。但如果我理解正确的话,它只是付费版本?但奇怪的是,它对我有效,而对你无效。@Jamby:看看我的答案有什么变化。另外,我觉得这个控件有点糟糕,我知道很多其他控件都很容易使用它…@Jamby:Btw,你的“阈值”似乎缺少一个“h”。是的,我认为这个解决方案会奏效,但我并不真的喜欢它,因为它在后面的代码中更难阅读和硬编码,虽然我倾向于采用XAML中的所有UI逻辑(而且,因为这个简单的表单不是在MVVM中开发的),但是,我不喜欢这个解决方案的主要原因是后台设置器工作,所以我不明白为什么值设置器不工作。。谢谢你纠正我的打字错误。
<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>
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");
}
}
}