我想在表面應用程序中使用Expander控件。我已經看到它不是一個表面控件,所以應用程序編譯和控制顯示,但聯繫人不起作用。在微軟表面平臺上使用WPF擴展器控件
無論如何,我可以修改聯繫人事件並使其在表面應用程序中工作。
我想在表面應用程序中使用Expander控件。我已經看到它不是一個表面控件,所以應用程序編譯和控制顯示,但聯繫人不起作用。在微軟表面平臺上使用WPF擴展器控件
無論如何,我可以修改聯繫人事件並使其在表面應用程序中工作。
要做到這一點,您只需將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"
我討厭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;
}