Использование элемента управления расширителем WPF на платформе Microsoft surface


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

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

2 2

2 ответа:

Чтобы сделать это, все, что вам нужно сделать, это изменить шаблон 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 привязано к пространству имен XML Surface:

xmlns:s="http://schemas.microsoft.com/surface/2008"

Мне не хочется ворошить такую старую тему, но это был лучший результат google, и я нашел решение, которое сработало лучше для меня.

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

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

Перебираем список объектов GUI, находим кнопки ToggleButtons (фактическая кликабельная часть экспандера), включите их сенсорную поддержку и свяжите с ними событие при запуске 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;
    }