1

我有一个继承 TextBox 的 WatermarkTextBox,并且我有 x:Name="TestASearch" 将在列表视图中调用以显示从方法 textboxsearch_TextChanged 返回的搜索。

        <controls:WatermarkTextBox x:Name="TestASearch"  Grid.Column="2" Grid.Row="0"
                Margin="10,61,0,10" SelectAllOnGotFocus="True"  Background="White"
                TextChanged="textboxsearch_TextChanged">
                <controls:WatermarkTextBox.Watermark>
                    <TextBlock  FontStyle="Italic"   Text="Enter search text…" Width="116"/>
                </controls:WatermarkTextBox.Watermark>

WatermarkTextBox 类

    public WatermarkTextBox()
    {
        FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(WatermarkTextBox), new FrameworkPropertyMetadata(typeof(WatermarkTextBox)));
    }

现在我想使用相同的概念,除了我想要不同的 x:Name =TestBSearch 并想使用 TextChanged="textboxsearch_TextChanged"

            <controls:WatermarkTextBox x:Name="TestBSearch"  Grid.Column="2" Grid.Row="0"
                Margin="10,61,0,10" SelectAllOnGotFocus="True"  Background="White"
                TextChanged="textboxsearch_TextChanged">
                <controls:WatermarkTextBox.Watermark>
                    <TextBlock  FontStyle="Italic"   Text="Enter search text…" Width="116"/>
                </controls:WatermarkTextBox.Watermark>
            </controls:WatermarkTextBox>

当我尝试此操作时,我收到错误“PropertyMetadata 已为类型‘WatermarkTextBox’注册。” 如何重用相同的代码?

谢谢

4

1 回答 1

1

DefaultStyleKeyProperty.OverrideMetadata 应在静态构造函数中设置:

static WatermarkTextBox()
{
    FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(WatermarkTextBox), new FrameworkPropertyMetadata(typeof(WatermarkTextBox)));
}
于 2013-07-24T15:37:29.530 回答