我想在表面应用程序中使用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;
}