make ControlSizeTrigger works even if the control is already loaded (#738)
This commit is contained in:
parent
bc2d2d4e9d
commit
25cdca991c
@ -23,58 +23,50 @@ ControlSizeTrigger::~ControlSizeTrigger()
|
|||||||
UnregisterSizeChanged(Source);
|
UnregisterSizeChanged(Source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement^ oldValue, FrameworkElement^ newValue)
|
void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement ^ oldValue, FrameworkElement ^ newValue)
|
||||||
{
|
{
|
||||||
UnregisterSizeChanged(oldValue);
|
UnregisterSizeChanged(oldValue);
|
||||||
RegisterSizeChanged(newValue);
|
RegisterSizeChanged(newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlSizeTrigger::OnSizeChanged(Object^ sender, SizeChangedEventArgs^ e)
|
void ControlSizeTrigger::OnSizeChanged(Object ^ sender, SizeChangedEventArgs ^ e)
|
||||||
{
|
{
|
||||||
UpdateIsActive(e->NewSize);
|
UpdateIsActive(e->NewSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
{
|
|
||||||
SetActive(sourceSize.Width >= MinWidth);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetActive(false);
|
SetActive(MinWidth >= 0 && sourceSize.Width >= MinWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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