Ken Schneider Ответов: 1

Перемещение stackpanel с помощью datatrigger


I have been searching the Internet for hours and can't figure out how to move a stack panel based on a datatrigger. I'm new to WPF so I don't know if this is the correct way to do what I want. Basically, I want to move views (I was told that using custom controls and putting them into stack panels would allow me to move them as needed) in and out. As an example, I want to have the user login control move into the center of the screen when the application opens. Then, once the user successfully logs in I want the control to move off the screen and I will have another control move in from the side, etc. I am at the point where I have the MainWindow looking at the IsLoggedIn boolean (I'm using MVVM) and being notified when I have a successful login from the ViewModel. I have the storyboards to move in and out working but I can't figure out how to trigger them based on the value of IsLoggedIn.

Как только я получу Это, я хотел бы иметь возможность регулировать, как далеко происходит движение, основываясь на размере элемента управления и размере экрана, так как мониторы будут разными. Например, я хотел бы настроить высоту поля, чтобы взять общую высоту используемого экрана компьютера (вычисленную во время выполнения ОС), а затем вычесть высоту элемента управления. Это даст мне количество "белого пространства", которое я могу разделить на два, чтобы элемент управления оказался в середине экрана. Я не знаю, как поместить этот расчет в настройки поля для раскадровки.

Что я уже пробовал:

До сих пор я пробовал это и потерпел неудачу во всем (обратите внимание, что я прокомментировал свои попытки, потому что они не работают. В настоящее время он работает так, что приложение запускается, а "тестовая метка", которую я вставил, заполняется ложью при запуске и изменяется на истину при успешном входе в систему, поэтому я знаю, что привязка работает):


&ЛТ;окна.ресурсы&ГТ;



<раскадровка x:ключ="sbShowUserLogin">
&ЛТ;раскадровка thicknessanimation.targetproperty="маржа"="0,-400,0,0" в="0,400,0,0" decelerationratio=".9" Продолжительность="0:0:3"&ГТ;

<раскадровка x:ключ="sbHideUserLogin">
&ЛТ;раскадровка thicknessanimation.targetproperty="маржа" от="0,400,0,0" для="0,-400,0,0" accelerationratio=".9" Продолжительность="0:0:3"&ГТ;












<сетка>



&ЛТ;панель элемент StackPanel.свойства zIndex="2" наименование="pnlUserLoginControl" ориентация="вертикальный" ширина="500" высота="400" поле HorizontalAlignment="центр" имеет="топ" маржи="0,-400,0,0"&ГТ;
<lv:loginviewcontrol horizontalalignment="Center" verticalalignment="Center" height="400" width="500">

1 Ответов

Рейтинг:
2

Gerry Schmitz

(StackPanel-одна из менее гибких панелей).

Сетки могут "накладывать" содержимое, а стековые панели-нет.

Чтобы центрировать любой элемент управления, установите вертикальное и горизонтальное выравнивание в положение центр.

Вместо "перемещения" установите видимость элементов управления в свернутое состояние; установите его в видимое, чтобы он появился в поле зрения. Кроме того, раскадровка непрозрачности в сочетании с переключением видимости.

Если сетка содержит несколько столбцов и строк, установите соответствующие диапазоны столбцов и строк; элемент управления по-прежнему будет центрироваться относительно этих диапазонов.

Гораздо проще, чем "переезд".