Ответы пользователя Alexander - CodeHelper

Alexander

Alexander
Карма 1361
Имя Ояябу!
Возраст 27
Сайт Неизвестно
Twitter Неизвестно
Участвует в проекте 1112 дн., 19 час., 31 мин.
Последняя активность 503 дн., 2 час., 41 мин. назад
Ух какой!

Ответы

Новые Лучшие
1
2
3
4
5
Перейти к вопросу →

Самый простой способ - это определить обработчик на событие GotFocus окна. Благодаря маршрутизации событий события получения фокуса у дочерних элементов будут обрабатываться обработчиком окна. Это не сработает, если у самого дочернего элемента на данное событие назначен обработчик, в котором значение e.Handled устанавливается в true.

Перейти к вопросу →

В общем, такой поиск может выглядеть так:

public static class ExtensionMethods
{
    private static void GetAllInstancesRecursive(IApplicationContext context,
                                                 Type serviceType,
                                                 ref ICollection<object> result)
    {
        if (context == null) return;

        foreach (object o in context.GetObjectsOfType(serviceType).Values)
        {
            result.Add(o);
        }

        GetAllInstancesRecursive(context.ParentContext, serviceType, ref result);
    } 

    public static IEnumerable<object> GetObjectsOfTypeRecursive(this IApplicationContext context, 
                                                                     Type serviceType)
    {
        ICollection<object> result = new Collection<object>();
        GetAllInstancesRecursive(context, serviceType, ref result);
        return result;
    }
}
Перейти к вопросу →

Наверное никак. В общем-то все логично. ParentContext заполняется из xml, а регистрация из кода идет непосредственно в GenericApplicationContext, который является контейнером сам по себе. Так что метод GetObjectsOfType ищет только там, где он вызван.

Хотя... с другой стороны данный метод определен в классе AbstractApplicationContext, где определено так же и свойство ParentContext. Почему бы этому методу не искать рекурсивно во всех ParentContext'ах?

Или все же возможно сконфигурировать контейнер для такого поиска?

Перейти к вопросу →

Вот тут пишут, что дело может быть в пространствах имен WPF - при построении дерева элементов из code behind нужно указывать пространства имен явно. Попробовал изменить код из вопроса следующим образом:

private T CreateContent<T>(object view, IExtendedPresenter model)
        where T : ManagedContent, new()
{

    (view as FrameworkElement).Name = "view";
    INameScope s = new NameScope();

    var contentControl = new T { Content = view, Name = "contentControl"};

    NameScope.SetNameScope(contentControl, s);
    s.RegisterName("contentControl", contentControl);
    contentControl.RegisterName("view", view);

    contentControl.SetBinding(
            ManagedContent.TitleProperty,
            "Title"
            );

    _binder.Bind(model, contentControl, null);

     return contentControl;
}

но ничего не изменилось. По прежнему поиск возвращает null. В чем же дело, товарище разработчике?

Перейти к вопросу →

А что если использовать стиль?

...
<ToolBar Grid.Row="0">
    <ToolBar.Resources>
        <Style x:Key="bindingButtonStyle" TargetType="{x:Type Button}">
            <Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsButtonsEnabled}"/>
        </Style>
    </ToolBar.Resources>
    <Button Content="Button1" Style="{StaticResource bindingButtonStyle}" />
    <Button Content="Button2" />
    <Button Content="Button3" Style="{StaticResource bindingButtonStyle}"/>

При этом кнопки, к которым применен стиль, получат привязку. Ну, либо все кнопки, если стилю не задавать ключ.

Перейти к вопросу →

Не, я не в конструкторе пробовал.

FrameworkElement source = (FrameworkElement) message.Source.UIElement;
Popup popup = source.FindName<Popup>("popupErrors", true);

ItemsControl list = popup.FindName<ItemsControl>("errorsList", true);
list.ItemsSource = _validationResults;

var sourceOffset = source.TransformToVisual(Application.Current.MainWindow).Transform(new Point(0, 0));
var popupOffset = popup.TransformToVisual(Application.Current.MainWindow).Transform(new Point(0, 0));

popup.IsOpen = true;

popup.HorizontalOffset = sourceOffset.X - popupOffset.X - popup.ActualWidth;

popup.Child.MouseLeave += delegate { popup.IsOpen = false; };
Перейти к вопросу →

Я набираю карму.

Путин говорит: "Даешь сиськи!"

Путин утверждает, что лучшая платформа - это сиськи.

Перейти к вопросу →

В общем, NaN - это значение по-умолчанию для Width и в данном случае может интерпретироваться как "не установлено". Width - это "желаемая" ширина FrameworkElement'а, в то время как ActualWidth - ширина элемента, определяемая при отрисовке этого элемента (т.о. доступна только для чтения). Рекомендуется ориентироваться на нее.

Но тут у меня опять проблема - она равна 0.0 почему-то... Хотя визуально элемент виден.

Перейти к вопросу →

По словам Неназываемого "Настоящему программисту не нужны никакие языки программирования!". А на счет MVP - это все фигня, все давно уже перешли на linux!!! Учите матчасть, автор.


1
2
3
4
5
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.