2010-10-01 49 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; 
    }