2010-10-01 150 views
2

我想在表面应用程序中使用Expander控件。我已经看到它不是一个表面控件,所以应用程序编译和控制显示,但联系人不起作用。在微软表面平台上使用WPF扩展器控件

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

回答

3

要做到这一点,您只需将Expander的模板更改为使用Surface控件而不是常规控件。

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

所有你需要改变的是切换按钮:

<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命名空间:

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

我讨厌necro这样一个老话题,但这是最好的谷歌结果,我发现了一个更好的解决方案。

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

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

迭代通过GUI对象的列表中,找到的ToggleButtons(扩展器的实际点击部分),打开他们的触摸支持,而当润色被触发事件绑定一个给他们(当用户升降机他们的手指)。

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