make ControlSizeTrigger works even if the control is already loaded (#738)
This commit is contained in:
parent
bc2d2d4e9d
commit
25cdca991c
@ -31,20 +31,23 @@ void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement^ oldValue, Fra
|
|||||||
|
|
||||||
void ControlSizeTrigger::RegisterSizeChanged(FrameworkElement ^ element)
|
void ControlSizeTrigger::RegisterSizeChanged(FrameworkElement ^ element)
|
||||||
{
|
{
|
||||||
if (element == nullptr) { return; }
|
if (element == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (element != Source)
|
if (element != Source)
|
||||||
{
|
{
|
||||||
UnregisterSizeChanged(Source);
|
UnregisterSizeChanged(Source);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sizeChangedToken =
|
m_sizeChangedToken = element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
|
||||||
element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
|
UpdateIsActive(element->RenderSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlSizeTrigger::UnregisterSizeChanged(FrameworkElement ^ element)
|
void ControlSizeTrigger::UnregisterSizeChanged(FrameworkElement ^ element)
|
||||||
{
|
{
|
||||||
if ((element != nullptr) && (m_sizeChangedToken.Value != 0))
|
if (element != nullptr && m_sizeChangedToken.Value != 0)
|
||||||
{
|
{
|
||||||
element->SizeChanged -= m_sizeChangedToken;
|
element->SizeChanged -= m_sizeChangedToken;
|
||||||
m_sizeChangedToken.Value = 0;
|
m_sizeChangedToken.Value = 0;
|
||||||
@ -58,23 +61,12 @@ void ControlSizeTrigger::OnSizeChanged(Object^ sender, SizeChangedEventArgs^ e)
|
|||||||
|
|
||||||
void ControlSizeTrigger::UpdateIsActive(Size sourceSize)
|
void ControlSizeTrigger::UpdateIsActive(Size sourceSize)
|
||||||
{
|
{
|
||||||
if (Source != nullptr && MinWidth > 0 || MinHeight > 0)
|
if (MinHeight >= 0)
|
||||||
{
|
{
|
||||||
if (MinHeight > 0 && MinWidth > 0)
|
SetActive(sourceSize.Height >= MinHeight && (MinWidth < 0 || sourceSize.Width >= MinWidth));
|
||||||
{
|
|
||||||
SetActive((sourceSize.Height >= MinHeight) && (sourceSize.Width >= MinWidth));
|
|
||||||
}
|
|
||||||
else if (MinHeight > 0)
|
|
||||||
{
|
|
||||||
SetActive(sourceSize.Height >= MinHeight);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetActive(sourceSize.Width >= MinWidth);
|
SetActive(MinWidth >= 0 && sourceSize.Width >= MinWidth);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetActive(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@ namespace CalculatorApp::Views::StateTriggers
|
|||||||
|
|
||||||
DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::FrameworkElement^, Source);
|
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:
|
private:
|
||||||
~ControlSizeTrigger();
|
~ControlSizeTrigger();
|
||||||
|
Loading…
Reference in New Issue
Block a user