예제 #1
0
        /// <summary>
        /// When the expander expands, need to put the error message in the
        /// adorner layer because the controls below it, may have their own
        /// adorner validation error messages, this places the expander
        /// popup on top of all other adorder layer elements.
        /// </summary>
        void _objErrorsExpander_Expanded(object sender, RoutedEventArgs e)
        {
            //this forces the ErrorMessage to be reread from it's source
            this.InvalidateProperty(ErrorMessageProperty);

            var expanderGrid = VisualTreeSearchAssistant.FindVisualChild <Grid>(_errorsExpander);

            _errorsExpanderAdornerLayer = AdornerLayer.GetAdornerLayer(expanderGrid);

            String[] delimiter     = { Environment.NewLine };
            String[] errorMessages = this.ErrorMessage.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
            Array.Sort(errorMessages);

            var txt = new TextBlock {
                Width = this.Width, TextWrapping = TextWrapping.Wrap, Text = string.Join(Environment.NewLine + Environment.NewLine, errorMessages), Padding = new Thickness(5), Foreground = this.ErrorPopUpForeground, Background = this.ErrorPopUpBackground, Effect = new System.Windows.Media.Effects.DropShadowEffect {
                    ShadowDepth = 2
                }
            };

            //need to move the TextBlock down below the expander and indent a little
            var obj = new TranslateTransform(5, _errorsExpander.ActualHeight + 2);

            txt.RenderTransform           = obj;
            _textBlockAdorner             = new TextBlockAdorner(expanderGrid, txt);
            _textBlockAdorner.MouseLeave -= _objTextBlockAdorner_MouseLeave;
            _textBlockAdorner.MouseEnter -= _objTextBlockAdorner_MouseEnter;
            _errorsExpanderAdornerLayer.Add(_textBlockAdorner);
        }
예제 #2
0
        public override DataTemplate SelectTemplate(Object item, DependencyObject container)
        {
            var fwe = container as FrameworkElement;

            if (fwe != null)
            {
                var lbi = VisualTreeSearchAssistant.FindAncestor <ListBoxItem>(fwe);

                if (lbi != null)
                {
                    var pi = (PropertyInformationViewModel)lbi.DataContext;

                    PropertyChangedEventHandler lambda = null;
                    lambda = (s, args) => {
                        if (args.PropertyName == "ControlSpecificProperties")
                        {
                            pi.PropertyChanged -= lambda;

                            var cp = (ContentPresenter)container;

                            try {
                                cp.ContentTemplateSelector = null;
                                cp.ContentTemplateSelector = this;
                            } catch {
                                cp.ContentTemplateSelector = this;
                            }
                        }
                    };

                    pi.PropertyChanged += lambda;

                    var editEditor = (IEditEditor)pi.ControlSpecificProperties;
                    return(fwe.FindResource(editEditor.TemplateResourceKey) as DataTemplate);
                }
            }

            return(base.SelectTemplate(item, container));
        }
        void Close()
        {
            var win = VisualTreeSearchAssistant.FindAncestor <Window>(this);

            win?.Close();
        }