Использование управления экспандером WPF на платформе Microsoft. - PullRequest
2 голосов
/ 02 октября 2010

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

Могу ли я в любом случае изменить контактные события и заставить его работать в наземных приложениях.

Ответы [ 2 ]

3 голосов
/ 31 октября 2010

Для этого все, что вам нужно сделать, это изменить шаблон Expander на использование элементов управления Surface вместо обычных элементов управления.

Шаблон Expander по умолчанию можно найти по адресу http://msdn.microsoft.com/en-us/library/ms753296.aspx.

Все, что вам нужно изменить, - это ToggleButton:

<ToggleButton OverridesDefaultStyle="True"
              Template="{StaticResource ExpanderToggleButton}"
              IsChecked="{Binding IsExpanded, Mode=TwoWay, 
              RelativeSource={RelativeSource TemplatedParent}}">

изменяется на

<s:SurfaceToggleButton OverridesDefaultStyle="True"
                       Template="{StaticResource ExpanderToggleButton}"
                       IsChecked="{Binding IsExpanded, Mode=TwoWay, 
                       RelativeSource={RelativeSource TemplatedParent}}">

(закрывающие теги опущены)

Предполагается, что s привязан к пространству имен Surface XML:

xmlns:s="http://schemas.microsoft.com/surface/2008"
0 голосов
/ 21 апреля 2015

Я ненавижу некую такую ​​старую тему, но это был лучший результат Google, и я нашел решение, которое работало лучше для меня.

После загрузки графического интерфейса я рекурсивно использую VisualTreeHelper генерировать List<DependencyObject> всех объектов GUI во время выполнения.Мой проект требовал этот список объектов GUI по другим причинам, но он также дал мне очень простое решение для добавления Touch-поддержки для элементов управления не-Surface.

viewObjectList.ForEach(x =>
        {
            var temp = x as System.Windows.Controls.Primitives.ToggleButton;
            if (temp != null)
            {
                temp.IsManipulationEnabled = true;
                temp.TouchUp += TouchUpEvent;
            }
        });

Итерируйте по списку объектов GUI, найдитеToggleButtons (фактическая активируемая часть Expander), включите их сенсорную поддержку и привязайте к ним событие при срабатывании TouchUp (когда пользователь поднимает палец).

private void TouchUpEvent(object sender, TouchEventArgs e)
    {
        if (TouchesOver.Count() == 1)
        {
            var temp = sender as System.Windows.Controls.Primitives.ToggleButton;
            temp.IsChecked = !temp.IsChecked;
        }
        e.Handled = false;
    }
...