
[英]Error XDG0008: NumberBox is not supported in a Universal Windows Platform project
[英]XDG0008 error occuring while implementing DependencyProperty into TemplateBinding [duplicate]
为了在不直接更改模板的情况下轻松更改按钮的特定于模板的画笔,我决定制作一个将绑定到特定于模板的画笔的 DependencyProperty。 这样,我可以像更改任何其他常规属性一样轻松更改此画笔。 但是,在实现这个 DependencyProperty 之后,我遇到了一个错误:“名称“ExtensionClass”在命名空间“clr-namespace:extensions”中不存在。 是什么导致了这个错误?
XAML:
<ResourceDictionary xmlns:ext="clr-namespace:Extensions"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<ControlTemplate x:Key="ButtonBaseControlTemplate1" TargetType="{x:Type ButtonBase}">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="{TemplateBinding Property=ext:ExtensionsClass.MouseOverBackground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ResourceDictionary>
C#:
namespace Extensions {
public class ExtensionsClass {
public static readonly DependencyProperty MouseOverBackgroundProperty = DependencyProperty.Register("MouseOverBackground", typeof(Brush), typeof(Button));
public static void SetMouseOverBackground(UIElement element, Brush value) {
element.SetValue(MouseOverBackgroundProperty, value);
}
public static Brush GetMouseOverBackground(UIElement element) {
return (Brush)element.GetValue(MouseOverBackgroundProperty);
}
}
}
除了重复问题的答案中涵盖的 Binding 问题之外,您还必须注意您正在声明一个必须使用RegisterAttached
方法注册的附加属性。
除此之外,在 Register 和 RegisterAttached 方法中,第三个参数必须是声明属性的类型,而不是您打算设置属性的元素类型,即这里的typeof(ExtensionsClass)
。
public static class ExtensionsClass
{
public static readonly DependencyProperty MouseOverBackgroundProperty =
DependencyProperty.RegisterAttached(
"MouseOverBackground",
typeof(Brush),
typeof(ExtensionsClass),
null);
public static void SetMouseOverBackground(UIElement element, Brush value)
{
element.SetValue(MouseOverBackgroundProperty, value);
}
public static Brush GetMouseOverBackground(UIElement element)
{
return (Brush)element.GetValue(MouseOverBackgroundProperty);
}
}
您可以通过带括号的绑定路径绑定到附加属性:
<Setter
Property="Background"
TargetName="border"
Value="{Binding Path=(ext:ExtensionsClass.MouseOverBackground),
RelativeSource={RelativeSource TemplatedParent}}"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.