переопределить методы суперкласса в окне wpf - PullRequest
0 голосов
/ 07 декабря 2011

Я хочу сделать индивидуальную оконную основу. Поэтому я создал собственное окно, которое наследуется от Window.

Например:

public class MyWindowBase : Window
{

...
...

}

Я хочу переопределить различные Кисти Окна суперкласса для своих собственных целей. Из моего предыдущего опыта, чтобы переопределить методы / свойства без абстрактных или виртуальных в суперклассе, нужно ключевое слово «new».

Например:

public new void DoSomething() { ........ base.DoSomething() ....... }
public new string SomeText { get { ... } set {......} }

Это работает в моей предыдущей работе.

Однако в настоящее время работа с окном WPF не работает.

Я попытался переопределить различные Кисти Окна суперкласса следующим образом:

public new Brush BorderBrush  
{
  get { ... }
  set { myBorderBrush = value; base.BorderBrush = null }
}

public new Brush Background 
{
  get { ... }
  set { myBackground = value; base.Backgound = null; }
}

.....
.....
.....

Я попытался изменить значение вышеуказанных кистей в MyWindowBase, просто изменилось значение окна суперкласса, не изменилось значение myBorderBrush и myBackground.

Итак, как мне переопределить методы и свойства окна суперкласса?

На самом деле я хочу переопределить базовый фон, чтобы он всегда был нулевым или прозрачным, но измененное значение будет применено к моему собственному пользовательскому фону.

Большое спасибо!

1 Ответ

0 голосов
/ 07 декабря 2011

Если вы хотите установить только значение, вы можете установить его, используя

this.BorderBrush = Brushes.Blue;
this.Background = Brushes.Red;

Если вы хотите перезаписать метаданные свойства (для таких вещей, как значение по умолчанию, логика изменения свойства или проверка), вы можете использовать OverrideMetadata

Window.BackgroundProperty.OverrideMetadata(
    typeof(MyWindowBase), myPropertyMetadata);

Если вы просто хотите добавить логику в Changed, вы можете использовать DependencyPropertyDescriptor

var dpd = DependencyPropertyDescriptor.FromProperty(
    Window.BackgroundProperty, typeof(Window));
dpd.AddValueChanged(this.Value, new EventHandler(BackgroundChanged));

private void BackgroundChanged(object sender, EventArgs e)
{
    //do the code here
}

И если вы хотите переопределить метод, а не свойство, то вы можете использовать ключевое слово override

protected override void OnClosed(EventArgs e)
{
    base.OnClosed(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...