Видимость набора ViewBox из кода

В моем окне у меня есть элемент управления ViewBox, который содержит настраиваемый индикатор выполнения. Я установил его видимость на Collapsed в режиме дизайна, потому что мне нужно отображать его только в определенный момент (во время входа в приложение).

В моем индикаторе выполнения, который является пользовательским контролем, у меня есть обработчик событий для события VisibilityChanged, где я останавливаю и запускаю свою анимацию.

Когда пользователь нажимает кнопку «Войти», мне нужно показать этот ViewBox до тех пор, пока вход в систему не будет завершен, и снова свернуть его после успеха. Но когда я (в коде позади) устанавливаю ViewBox.Visibility = Visible, он не отображается.

Может ли кто-нибудь сказать мне, почему, или как это исправить?

XAML:

    <Viewbox x:Name="cpProgress" Width="50" Height="50" HorizontalAlignment="Center"   VerticalAlignment="Bottom" Grid.Row="1" Visibility="Collapsed" >
        <lc:CircularProgress />             
    </Viewbox>

Спасибо


person sinkien    schedule 05.02.2013    source источник
comment
можете ли вы предоставить весь xaml (с определением сетки)?   -  person daryal    schedule 05.02.2013
comment
Wpf не запускает анимацию невидимых элементов. Поэтому обязательно сначала установите видимость, а затем запустите анимацию. Можете ли вы установить видимость непосредственно на CircularProgress?   -  person Marius    schedule 05.02.2013
comment
Да, я могу установить видимость на CircularProgress, но это не имеет значения. Если я использую Label вместо своего пользовательского элемента управления, у меня будет тот же эффект => Настройка Visibility = Visible, но метка не видна:/   -  person sinkien    schedule 05.02.2013


Ответы (2)


измените ViewBox.Visibility = Visible на cpProgress.Visibility = Visible и убедитесь, что в сетке задана правильная высота строки для строки 1.

person daryal    schedule 05.02.2013
comment
Строка, где находится ViewBox, имеет высоту 155 (сам ViewBox представляет собой квадрат 50x50), поэтому я думаю, что место здесь не будет проблемой или будет? cpProgress — это имя окна просмотра. Если я устанавливаю Visibility в ViewBox, он не отображается, установка Visibility в моем USerControl (lc:CircularProgress) имеет тот же эффект, то есть без рендеринга. - person sinkien; 05.02.2013

Наконец-то я пришел к решению этой проблемы. Это действительно просто :). Я просто забыл, что если я запускаю процесс входа в систему в том же потоке, что и мое окно, пользовательский интерфейс будет зависать до завершения входа в систему. Таким образом, решение состоит в том, чтобы создать новый поток, запустить логин в его контексте и дождаться установки флага completed в потоке пользовательского интерфейса. Процесс входа в систему должен выполняться асинхронно, чтобы пользовательский интерфейс мог отобразить мой пользовательский элемент управления.

person sinkien    schedule 05.02.2013