属性更改回调在各自的属性绑定到滚动条时不触发
本文关键字:属性 滚动条 绑定 回调 | 更新日期: 2024-11-05 15:46:24
我有一个相当简单的UserControl,我想用DependencyProperty进行扩展。该控件的相关代码如下:
public partial class CompassControl : UserControl
{
public static readonly DependencyProperty AngleProperty =
DependencyProperty.Register("Angle", typeof(Double), typeof(CompassControl),
new FrameworkPropertyMetadata( 0.0, FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(OnAngleChanged)));
private static void OnAngleChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
((CompassControl)target).SetImageAngle((Double)e.NewValue);
}
public CompassControl( )
{
InitializeComponent( );
}
public Double Angle
{
get { return (Double)GetValue(AngleProperty); }
set { SetValue(AngleProperty, value); }
}
此控件用于简单窗体;相关的 XAML 如下所示:
<DockPanel DockPanel.Dock="Bottom">
<DockPanel>
<TextBlock DockPanel.Dock="Left"
TextAlignment="Center" FontWeight="Bold" FontSize="12"
Padding="0,4,0,0" HorizontalAlignment="Left"
Height="22" Width="60" Margin="10,0,0,0"
Text="{Binding ElementName=scrollBarAngle, Path=Value}">
</TextBlock>
<ScrollBar DockPanel.Dock="Left" Name="scrollBarAngle" Orientation="Horizontal"
Height="22" Margin="10,0"
Maximum="360.0" Minimum="0.0" SmallChange="1.0" Value="0.0"
ValueChanged="scrollBarAngle_ValueChanged" />
</DockPanel>
</DockPanel>
<ctl:CompassControl DockPanel.Dock="Top" Name="compassControl"
Margin="5" Width="Auto" Height="Auto"
Angle="{Binding ElementName=scrollBarAngle, Path=Value}"
/>
</DockPanel>
TextBox 的"Text"属性和我的控件的"Angle"属性使用以下绑定绑定到滚动条的"Value"属性:
"{Binding ElementName=scrollBarAngle, Path=Value}"
当我滚动滚动条时,文本字段按预期更新,但角度没有改变 - 没有调用 OnAngleChanged 回调!
但是,如果我直接更改滚动条的 ValueChanged 事件中的 Angle 属性,一切正常 - 属性已更改并触发了相应的回调:
private void scrollBarAngle_ValueChanged( object sender, RoutedPropertyChangedEventArgs<double> e )
{
compassControl.Angle = e.NewValue;
}
请帮助解决此问题!
谢谢--亚历克斯
我很抱歉 - 问题不在于代码,而在于环境!我打开了几份VS2013副本,该项目在其中两份中打开。无论如何,在阅读了 Clemens 的评论表明我的问题不可重现后,我关闭了 VS 的所有实例,然后启动了新实例,打开了项目 - 一切正常!
谢谢!