gpt4 book ai didi

c# - UserControl 的构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:10 32 4
gpt4 key购买 nike

我有自己的 WPF UserControl(例如 Image + ViewBox - 没关系)。此控件具有 bool 依赖属性,例如NeedToDrawRect。我想要实现的目标:当用户(在 XAML 中)将此属性设置为 true 时,我需要执行一些操作 - 但只需执行一次。我计划在 c-tor 中执行此操作,但似乎我还无法在该阶段看到此属性值:

XAML:

<pzi:PanZoomImage Grid.Row="1" Grid.Column="0" NeedToDrawRect="True" />

用户控件构造函数:

public PanZoomImage()
{
InitializeComponent();

LayoutRoot.DataContext = this;

// Here NeedToDrawRect is still false
if (NeedToDrawRect)
DoSmth();
}

那么,我在哪里可以检查用户在 XAML 中设置的值。当然,我可以覆盖 OnRender 并每次都检查那里,但我想使用正确的方式来执行此操作。

最佳答案

为依赖属性注册一个PropertyChangedCallback:

public static readonly DependencyProperty NeedToDrawRectProperty = DependencyProperty.Register(nameof(NeedToDrawRect),
typeof(bool), typeof(PanZoomImage ), new PropertyMetadata(new PropertyChangedCallback(OnValueChanged)));

public bool NeedToDrawRect
{
get { return (bool)GetValue(NeedToDrawRectProperty); }
set { SetValue(NeedToDrawRectProperty, value); }
}

private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctrl = (PanZoomImage)d;
var newValue = (bool)e.NewValue;
//...
}

只要依赖属性设置为新值,就会调用回调。

如果你只想做一次某事,你可以使用一个私有(private)字段来跟踪之前是否调用过回调,例如:

private int n;

private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (n++ > 0)
{
var ctrl = (PanZoomImage)d;
var newValue = (bool)e.NewValue;
//...
}
}

关于c# - UserControl 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48341529/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com