C# 在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

我有一个奇怪的问题,我目前正在尝试设计一个SingleUpDown控件(来自扩展WPF工具包)

这是不起作用的当前样式:

<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");
        }
    }
}