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

В моя прозорец имам контрола ViewBox, която съдържа персонализирана лента за прогрес. Зададох видимостта му на Свито в режим на проектиране, защото трябва да го покажа само в определен момент (по време на влизане в приложението).

В моята лента за напредъка, която е потребителски контрол, имам манипулатор на събития за събитие 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 няма да стартира анимации върху елементи, които не се виждат. Така че не забравяйте първо да зададете видимостта и след това да стартирате анимацията. Можете ли да зададете Visibility директно на 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