WP8.1 的自定义集线器控件
Custom Hub Control for WP8.1
我在理解 Hub 控件的构建方式时遇到了一些问题。
我想了解的主要思想是如何构建一个允许执行某些手势并且不会阻止内部控件的自定义控件。
使用 Hub
控件,我可以按 Button
并查看其回调(颜色和大小更改),然后将指针向左滑动 Hub
控件。
很抱歉这个愚蠢的问题,但我没有足够的经验自己找到任何答案。提前感谢任何建议。
主要问题与使用 GestureRecognizer
有关。
我已经解决了拒绝使用 GestureRecognizer
并开始在主容器上使用 Manipulation Events 的问题。
简化模板代码:
<Style TargetType="my:CustomHub">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="my:CustomHub">
<Grid x:Name="RootGrid">
<ContentPresenter x:Name="MainPresenter"
Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
控件的代码隐藏:
public sealed class CustomHub
{
public FrameworkElement Container { get; set; }
public MainView()
{
this.InitializeComponent();
}
private void InitGestureInteraction()
{
this.Container = (FrameworkElement)GetTemplateChild("RootGrid");
this.Container.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateRailsX;
this.Container.ManipulationStarted += (s, e) =>
{
};
this.Container.ManipulationDelta += (s, e) =>
{
var x = e.Cumulative.Translation.X;
// implementation of moving
};
this.Container.ManipulationCompleted += (s, e) =>
{
var x = e.Cumulative.Translation.X;
// implementation of moving
};
}
}
我在理解 Hub 控件的构建方式时遇到了一些问题。 我想了解的主要思想是如何构建一个允许执行某些手势并且不会阻止内部控件的自定义控件。
使用 Hub
控件,我可以按 Button
并查看其回调(颜色和大小更改),然后将指针向左滑动 Hub
控件。
很抱歉这个愚蠢的问题,但我没有足够的经验自己找到任何答案。提前感谢任何建议。
主要问题与使用 GestureRecognizer
有关。
我已经解决了拒绝使用 GestureRecognizer
并开始在主容器上使用 Manipulation Events 的问题。
简化模板代码:
<Style TargetType="my:CustomHub">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="my:CustomHub">
<Grid x:Name="RootGrid">
<ContentPresenter x:Name="MainPresenter"
Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
控件的代码隐藏:
public sealed class CustomHub
{
public FrameworkElement Container { get; set; }
public MainView()
{
this.InitializeComponent();
}
private void InitGestureInteraction()
{
this.Container = (FrameworkElement)GetTemplateChild("RootGrid");
this.Container.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateRailsX;
this.Container.ManipulationStarted += (s, e) =>
{
};
this.Container.ManipulationDelta += (s, e) =>
{
var x = e.Cumulative.Translation.X;
// implementation of moving
};
this.Container.ManipulationCompleted += (s, e) =>
{
var x = e.Cumulative.Translation.X;
// implementation of moving
};
}
}