コード例 #1
0
        void ElementLoaded(object sender, RoutedEventArgs e)
        {
            UpdateContext();

            DependencyObject currentElement;

            if (context.View == null)
            {
                currentElement = AssociatedObject;
                while (currentElement != null)
                {
                    if (Action.HasTargetSet(currentElement))
                    {
                        break;
                    }

                    currentElement = BindingScope.GetVisualParent(currentElement);
                }
            }
            else
            {
                currentElement = context.View;
            }

#if NET || NETCORE
            var binding = new Binding {
                Path   = new PropertyPath(Message.HandlerProperty),
                Source = currentElement
            };
#elif WINDOWS_UWP
            var binding = new Binding {
                Source = currentElement
            };
#elif NET5_0_WINDOWS
            const string bindingText  = "<Binding xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation\' xmlns:cal='clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform' Path='(cal:Message.Handler)' />";
            StringReader stringReader = new StringReader(bindingText);
            XmlReader    xmlReader    = XmlReader.Create(stringReader);
            var          binding      = (Binding)XamlReader.Load(xmlReader);
            binding.Source = currentElement;
#else
            const string bindingText = "<Binding xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation\' xmlns:cal='clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform' Path='(cal:Message.Handler)' />";

            var binding = (Binding)XamlReader.Load(bindingText);
            binding.Source = currentElement;
#endif
            BindingOperations.SetBinding(this, HandlerProperty, binding);
        }