Для начала я бы расширил это свойство - каждое утверждение довольно сложно в данный момент. Вот расширенная версия:
public ImageSource ButtonImage
{
get
{
var template = ProcestaImageButton.Template
.FindName("ButtonImage", ProcestaImageButton);
var image = template as Image;
return image.Source;
}
set
{
var template = ProcestaImageButton.Template
.FindName("ButtonImage", ProcestaImageButton);
var image = template as Image;
image.Source = value;
}
}
Тогда я, вероятно, извлеку общий код в свойство помощника:
private Image ProcestaImageButtonImage
{
get
{
var template = ProcestaImageButton.Template
FindName("ButtonImage", ProcestaImageButton);
return template as Image;
}
}
public ImageSource ButtonImage
{
get { return ProcestaImageButtonImage.Source; }
set { ProcestaImageButtonImage.Source = value; }
}
Далее я бы сменил as
на актерский состав:
private Image ProcestaImageButtonImage
{
get
{
var template = ProcestaImageButton.Template
.FindName("ButtonImage", ProcestaImageButton);
return (Image) template;
}
}
public ImageSource ButtonImage
{
get { return ProcestaImageButtonImage.Source; }
set { ProcestaImageButtonImage.Source = value; }
}
На данный момент у вас может все еще есть NullReferenceException
или у вас может есть InvalidCastException
- и вдруг у вас появляется гораздо больше информации о том, что не так.
Актерский состав здесь лучше, поскольку вы всегда ожидаете, что FindName
вернет Image
, не так ли? Если условие сбоя при преобразовании типа является ошибочным, следует использовать только приведение типа as
, если допустимо выражение , а не целевого типа, и вы собираетесь обработать его. этот случай отдельно.