在Metro中使用WPF样式属性设置器时,枚举依赖项属性设置为null

时间:2012-09-05 14:10:53

标签: c# wpf xaml microsoft-metro dependency-properties

在我的Metro应用程序中,我有一个enum类型的附加属性。

当直接将元素上的属性设置为XAML属性时,值设置得很好,但在样式中使用Setter元素时,虽然设置了属性,但它设置为null value(即下面代码中的e.NewValue为null)

这是为什么?它导致问题,显然不能转换为枚举类型。感谢。

以下是相关代码:

    public static readonly DependencyProperty KeyboardScrollRestrictionStyleProperty =
        DependencyProperty.RegisterAttached("KeyboardScrollRestrictionStyle", typeof(KeyboardScrollRestrictionStyle), typeof(FlipViewScrollBehaviour),
            new PropertyMetadata(KeyboardScrollRestrictionStyle.TextBox, OnKeyboardScrollRestrictionStyleChanged));

    static void OnKeyboardScrollRestrictionStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    { 
       //I check e.NewValue at breakpoint
    }

这有效(e.NewValue是TextBox):

<TemplatedControls:WatermarkTextBox       
Behaviours:FlipViewScrollBehaviour.KeyboardScrollRestrictionStyle="TextBox"
/>

这不是(e.NewValue为空):

<Style x:Key="TimesheetLineListViewItemTextBox" TargetType="TextBox">
    <Setter Property="Behaviours:FlipViewScrollBehaviour.KeyboardScrollRestrictionStyle" Value="TextBox" />
</Style>

1 个答案:

答案 0 :(得分:0)

如果你在本地的textBox中设置附加属性,然后尝试用你的风格中的Setter覆盖它,这是唯一可以猜到哪种情况会阻止它工作的情况。例如 -

<TemplatedControls:WatermarkTextBox    
Behaviours:FlipViewScrollBehaviour.KeyboardScrollRestrictionStyle="TextBox"
Style ="{StaticResource TimesheetLineListViewItemTextBox}"/>

在这里你要在本地设置它,如果尝试设置样式设置器,它就不会工作。请参阅此链接 - Dependency Property Precedence Order