В WPF, как я могу определить, видимо ли управление пользователю?

Долгое обсуждение того, почему у Вас должно абсолютно быть управление исходным кодом:

Управление версиями, необходимое для небольшой группы разработки (1-2 программиста)?

Мои комментарии от того потока:

Вы всегда, всегда хотите иметь своего рода Управление исходным кодом, даже если Вы работаете над проектом собой.

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

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

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

, Если Ваш босс полон решимости придерживаться инструментов Microsoft, пойдите для Сервера Основы Команды вместо VSS. Это - намного лучшая система, чем VSS, и это имеет хорошие функции как интегрированное отслеживание ошибок.

60
задан Trap 4 October 2009 в 23:55
поделиться

2 ответа

Вы можете использовать эту небольшую вспомогательную функцию, которую я только что написал, которая проверяет, виден ли элемент для пользователя в данном контейнере. Функция возвращает истину , если элемент частично виден. Если вы хотите проверить, полностью ли он виден, замените последнюю строку на rect.Contains (bounds) .

private bool IsUserVisible(FrameworkElement element, FrameworkElement container)
{
    if (!element.IsVisible)
        return false;

    Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
    Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
    return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
}

В вашем случае element будет вашим пользовательским элементом управления, а контейнер ваше окно.

80
ответ дан 24 November 2019 в 17:47
поделиться

Используйте эти свойства для содержащего элемента управления:

VirtualizingStackPanel.IsVirtualizing="True" 
VirtualizingStackPanel.VirtualizationMode="Recycling"

, а затем подключите прослушивание подписчиков INotifyPropertyChanged.PropertyChanged вашего элемента данных, как это

    public event PropertyChangedEventHandler PropertyChanged
    {
        add
        {
            Console.WriteLine(
               "WPF is listening my property changes so I must be visible");
        }
        remove
        {
            Console.WriteLine("WPF unsubscribed so I must be out of sight");
        }
    }

Для получения более подробной информации см. http://joew.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3DWPF

4
ответ дан 24 November 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: