In een WPF applicatie heb ik een aantal custom vensters, welke feitelijk geen stijl hebben (WindowStyle="None") en waar ik zelf elementen zoals een titelbalk op plaats.
Het betreffende dialoogvenster heeft een ResizeMode = CanResize, en SizeToContent = Height. De Height = "Auto", en er is een MinHeight opgegeven. In het venster staat een expander element, welke na het uitklappen de hoogte van het venster veranderd (de extra content komt er bij). De grid-row waar deze expander in staat heeft een variabele hoogte ("*")
Het probleem is dat na het uitklappen van de expander, de 'extra' hoogte van het venster niet zichtbaar is, en dus visueel wordt afgekapt. Als ik dat venster sleep of er naast klik wordt niet niet-zichtbare deel plots wel zichtbaar.
Lijkt er op dat het venster alleen opnieuw getekend moet worden na het uitklappen van de expander, maar ik krijg dit in deze situatie niet voor elkaar.
De standaard methoden hiervoor zijn Me.InvalidateVisual() en Me.UpdateLayout(), maar dat heeft geen effect.
Google bracht mij op een mogelijke oplossing:
Maar ook dit werkt niet. Het doet gewoonweg niks. Ook als ik i.p.v. het venster (Me) het 'hoofd'-grid probeer te re-draw-en heeft dit geen effect.
Na testen blijkt dat het .expanded event van de expander al afgevuurt wordt voordat het element werkelijk uitgeklapt is, en dus de redraw te vroeg uit zou voeren. Maak ook als ik een aparte knop op het venster maak welke deze functie uitvoert gebeurt er niks.
Hoe kan ik toch een redraw forceren welke in deze situatie werkt?
Het betreffende dialoogvenster heeft een ResizeMode = CanResize, en SizeToContent = Height. De Height = "Auto", en er is een MinHeight opgegeven. In het venster staat een expander element, welke na het uitklappen de hoogte van het venster veranderd (de extra content komt er bij). De grid-row waar deze expander in staat heeft een variabele hoogte ("*")
Het probleem is dat na het uitklappen van de expander, de 'extra' hoogte van het venster niet zichtbaar is, en dus visueel wordt afgekapt. Als ik dat venster sleep of er naast klik wordt niet niet-zichtbare deel plots wel zichtbaar.
Lijkt er op dat het venster alleen opnieuw getekend moet worden na het uitklappen van de expander, maar ik krijg dit in deze situatie niet voor elkaar.
De standaard methoden hiervoor zijn Me.InvalidateVisual() en Me.UpdateLayout(), maar dat heeft geen effect.
Google bracht mij op een mogelijke oplossing:
code:
1
2
3
| Private Shared EmptyDelegate As Action = Function() End Function Me.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.ApplicationIdle, EmptyDelegate) |
Maar ook dit werkt niet. Het doet gewoonweg niks. Ook als ik i.p.v. het venster (Me) het 'hoofd'-grid probeer te re-draw-en heeft dit geen effect.
Na testen blijkt dat het .expanded event van de expander al afgevuurt wordt voordat het element werkelijk uitgeklapt is, en dus de redraw te vroeg uit zou voeren. Maak ook als ik een aparte knop op het venster maak welke deze functie uitvoert gebeurt er niks.
Hoe kan ik toch een redraw forceren welke in deze situatie werkt?