WP8.1的自定义中心控制

本文关键字:心控 控制 自定义 WP8 | 更新日期: 2023-09-27 18:18:45

我在理解Hub Control是如何构建的方面有一些问题。我想理解的主要思想是如何构建一个自定义控件,它允许执行一些手势,并且不会阻塞内部的控件。

使用Hub控件,我可以按下Button并查看其回调(颜色和大小变化),然后移动指针向左滑动Hub控件。

很抱歉这是一个如此愚蠢的问题,但我没有足够的经验来自己找到任何答案。

WP8.1的自定义中心控制

主要问题与GestureRecognizer的使用有关。我已经修复了我的问题,拒绝使用GestureRecognizer,并开始在主容器上使用操纵事件。

简化后的模板代码:
<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
        };
    }
}