我在构建自定义控件时遇到了一些麻烦。这是控制源:
namespace SilverlightStyleTest
{
public class AnotherControl: TextBox
{
public string MyProperty { get; set; }
}
}
在同一命名空间中我尝试使用MyProperty的setter创建一个样式,如下所示:
<UserControl x:Class="SilverlightStyleTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Local="clr-namespace:SilverlightStyleTest">
<UserControl.Resources>
<Style x:Name="AnotherStyle" TargetType="Local:AnotherControl">
<Setter Property="Width" Value="200"/>
<Setter Property="MyProperty" Value="Hello."/>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Local:AnotherControl Style="{StaticResource AnotherStyle}"/>
</Grid>
</UserControl>
我最终遇到了运行时错误: 属性Property的属性值MyProperty无效。 [行:9位置:30]
我无法弄清楚导致此错误的样式有什么问题。我还尝试“完全限定”属性名称为“Local:AnotherControl.MyProperty”,但这也不起作用。
答案 0 :(得分:4)
非依赖属性无法在样式中设置。
您需要将其定义为DependencyProperty:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(string), typeof(AnotherTextBox),
new FrameworkPropertyMetadata((string)null));
public string MyProperty
{
get { return (string)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}