gpt4 book ai didi

c# - 附加属性 + 样式 -> ArgumentNullException

转载 作者:行者123 更新时间:2023-11-30 13:59:31 25 4
gpt4 key购买 nike

我创建了一个非常简单的附加属性:

public static class ToolBarEx 
{
public static readonly DependencyProperty FocusedExProperty =
DependencyProperty.RegisterAttached(
"FocusedEx", typeof(bool?), typeof(FrameworkElement),
new FrameworkPropertyMetadata(false, FocusedExChanged));

private static void FocusedExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is ToolBar)
{
if (e.NewValue is bool)
{
if ((bool)e.NewValue)
{
(d as ToolBar).Focus();
}
}
}
}

public static bool? GetFocusedEx(DependencyObject obj)
{
return (bool)obj.GetValue(FocusedExProperty);
}

public static void SetFocusedEx(DependencyObject obj, bool? value)
{
obj.SetValue(FocusedExProperty, value);
}
}

在 Xaml 中设置它非常好,但如果我尝试在样式中设置它:

我在运行时收到一个 ArguemntNullException(说:“值不能为空。参数名称:property").

我不知道这里出了什么问题。任何提示都适用!

最佳答案

注册附加依赖属性时常犯的一个错误是错误地指定了 ownerType 参数。这必须始终是注册类,ToolBarEx 这里:

public static readonly DependencyProperty FocusedExProperty =
DependencyProperty.RegisterAttached(
"FocusedEx", typeof(bool?), typeof(ToolBarEx),
new FrameworkPropertyMetadata(false, FocusedExChanged));

为了避免属性更改处理程序中出现不必要的代码,您可以安全地将 NewValue 转换为 bool:

private static void FocusedExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var toolBar = d as ToolBar;
if (toolBar != null && (bool)e.NewValue)
{
toolBar.Focus();
}
}

关于c# - 附加属性 + 样式 -> ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321593/

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