make ControlSizeTrigger works even if the control is already loaded (#738)

This commit is contained in:
Rudy Huyn 2019-10-29 15:21:32 -07:00 committed by Pepe Rivera
parent bc2d2d4e9d
commit 25cdca991c
2 changed files with 16 additions and 24 deletions

View File

@ -31,20 +31,23 @@ void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement^ oldValue, Fra
void ControlSizeTrigger::RegisterSizeChanged(FrameworkElement ^ element)
{
if (element == nullptr) { return; }
if (element == nullptr)
{
return;
}
if (element != Source)
{
UnregisterSizeChanged(Source);
}
m_sizeChangedToken =
element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
m_sizeChangedToken = element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
UpdateIsActive(element->RenderSize);
}
void ControlSizeTrigger::UnregisterSizeChanged(FrameworkElement ^ element)
{
if ((element != nullptr) && (m_sizeChangedToken.Value != 0))
if (element != nullptr && m_sizeChangedToken.Value != 0)
{
element->SizeChanged -= m_sizeChangedToken;
m_sizeChangedToken.Value = 0;
@ -58,23 +61,12 @@ void ControlSizeTrigger::OnSizeChanged(Object^ sender, SizeChangedEventArgs^ e)
void ControlSizeTrigger::UpdateIsActive(Size sourceSize)
{
if (Source != nullptr && MinWidth > 0 || MinHeight > 0)
if (MinHeight >= 0)
{
if (MinHeight > 0 && MinWidth > 0)
{
SetActive((sourceSize.Height >= MinHeight) && (sourceSize.Width >= MinWidth));
}
else if (MinHeight > 0)
{
SetActive(sourceSize.Height >= MinHeight);
SetActive(sourceSize.Height >= MinHeight && (MinWidth < 0 || sourceSize.Width >= MinWidth));
}
else
{
SetActive(sourceSize.Width >= MinWidth);
}
}
else
{
SetActive(false);
SetActive(MinWidth >= 0 && sourceSize.Width >= MinWidth);
}
}

View File

@ -16,9 +16,9 @@ namespace CalculatorApp::Views::StateTriggers
DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::FrameworkElement^, Source);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinHeight, 0.0);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinHeight, -1);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinWidth, 0.0);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinWidth, -1);
private:
~ControlSizeTrigger();