2010-03-17 2 views
6

Я играл с WPF Popup Control, и, насколько я вижу, свойство Видимость является излишним.Разница между свойствами IsOpen Popup и видимостью?

Если у вас есть всплывающее окно с IsOpen = True, оно будет видно, даже если его Видимость = Свернуто.

Если у вас есть всплывающее окно с IsOpen = False, то его видимость будет свернута и останется «скомпенсирована», когда IsOpen изменится на true и появится. (т. е. у вас будет что-то, что появляется на вашем экране, хотя Snoop говорит, что он скомпенсирован.)

Почему элемент управления Popup обладает обоими этими свойствами? Я что-то упустил?

ответ

2

Я считаю, что вы правы ... это в значительной степени избыточно. Я думаю, проблема заключается в том, что свойство Visibility унаследовано от UIElement и может быть истолковано как «Должно ли это иметь нормальное визуальное представление».

Поскольку Popup не имеет визуального представления в своем «состоянии по умолчанию» ... то есть: когда он закрыт, свойство не имеет большого значения. IsOpen, однако, является скорее свойством, основанным на поведении ... т.е.: «Если пользователю разрешено взаимодействовать с моим обычно скрытым содержимым?» Или, может быть, я просто оправдываю работу Microsoft здесь.

В конце дня все, что имеет представление пользовательского интерфейса, наследуется от UIElement и, следовательно, получает имущество Visibility ... даже в тех случаях, когда это ничего не значит.

+0

@Ben Von Handorf: «... все, что имеет представление UI, наследуется от UIElement и поэтому получает свойство Видимость ... даже в тех случаях, когда это ничего не значит». Другими словами, я могу ожидать найти довольно много свойств, которые являются бесполезными, просто потому, что они унаследованы? – cfouche

+0

Я не думаю, что многие из них будут бесполезны, но это всегда возможно. Этот случай несколько странный, поскольку, если они повторно использовали Visibility для обозначения «Open», что удивит большинство разработчиков. Это больше случай исключения, поскольку Popup не имеет «нормального» визуального представления, в то время как почти все остальное, которое наследуется от 'UIElement', делает (я не могу придумать другой контрпример с верхней части моей головы). –

0

MSDN дает полное среднее и назначение для обоих.

Popup.IsOpen - Получает или задает значение, указывающее, отображается ли всплывающее окно.

Popup.Visibility - Получает или задает видимость этого интерфейса пользовательского интерфейса (UI). Он унаследован от UIElement.

+1

Yep - Я прочитал эти два описания, прежде чем публиковать вопрос. Описание Popup.Visibility говорит: «Получает или задает видимость этого интерфейса пользовательского интерфейса (UI)». Но это именно то, чего нет. – cfouche