在微软平台上使用WPF扩展器控件

时间:2010-10-01 21:49:39

标签: wpf wpf-controls pixelsense

我正在尝试在表面应用程序中使用Expander控件。我已经看到它不是表面控件,所以应用程序编译和控制显示但联系人不起作用。

无论如何,我可以修改联系事件并使其在表面应用程序中起作用。

2 个答案:

答案 0 :(得分:3)

要做到这一点,您所要做的就是更改Expander的模板以使用Surface控件而不是常规控件。

可以在http://msdn.microsoft.com/en-us/library/ms753296.aspx找到Expander的默认模板。

您需要更改的是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"

答案 1 :(得分:0)

我讨厌这个老话题,但这是谷歌的最高结果,我找到了一个对我有用的解决方案。

我的GUI加载后,我递归使用VisualTreeHelper在运行时生成List<DependencyObject>所有GUI对象。由于其他原因,我的项目需要这个GUI对象列表,但它也为我提供了一个非常简单的解决方案,可以为非Surface控件添加Touch支持。

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;
    }