2013-07-24 4 views
1

У меня есть WatermarkTextBox, который наследует TextBox, и у меня есть x: Name = "TestASearch", который вызывается в listview для отображения поиска, полученного из метода textboxsearch_TextChanged.Как использовать один и тот же водяной знак TextBox

 <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))); 
    } 

Теперь я хочу использовать ту же концепцию, кроме того, что я хочу различных х: 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 уже зарегистрирован fo r type 'WatermarkTextBox'. " Как я могу повторно использовать один и тот же код?

Благодаря

ответ

1

DefaultStyleKeyProperty.OverrideMetadata должен быть установлен в статическом конструкторе:

static WatermarkTextBox() 
{ 
    FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(WatermarkTextBox), new FrameworkPropertyMetadata(typeof(WatermarkTextBox))); 
} 
+0

Спасибо ... Это было именно то, что было причиной ошибки – HXD

+0

КСТАТИ Почему это так важно, чтобы изменить его от public to static? кроме ошибки – HXD

+0

Статический конструктор вызывается только один раз. Как и в обычном конструкторе, и создал два экземпляра класса, вы дважды переопределяли метаданные для этого класса - это невозможно. – Lee

Смежные вопросы