【问题标题】:Windows Phone 8 XAML app - Clickable Rectangle objectWindows Phone 8 XAML 应用程序 - 可点击的矩形对象
【发布时间】:2014-07-24 05:17:54
【问题描述】:

我需要制作一个可点击的矩形,在该矩形上它将运行一个为其设置动画并执行一些操作的函数。我试图浏览 Microsoft 的 API,但我什么也没找到,因此我快疯了。这将是我最后一次接触 XAML,但我真的需要知道如何让它工作。

<Grid Background=Transparent>
    <Grid same same>
        <Rectangle MouseLeftButtonDown="moveClick" x:Name="red" 
                Fill="Red" Height="125" Width="125" Stroke="Pink" 
            StrokeThickness="10" Margin="106,196,225,348" 
            />
    </Grid>
</Grid>

这是我的矩形之一,我在 .xaml.cs 文件中有一个名为 moveClick 的函数,应该调用它。在该函数中,有一些代码会启动一个以该矩形为目标的动画。由于我有很多矩形想要制作动画,因此我将根据按下哪个矩形来更改目标。问题是,MouseEvent 没有发生。我已经用谷歌搜索了几个小时,但微软的帮助毫无用处。我不知道该怎么办。

我真的不能发布比这更多的代码,因为那时我必须重写它,因为我正在编程的 PC 没有互联网连接。这是我的笔记本电脑,我正在使用手机,因为我的正常互联网已关闭。我的桌面没有wifi。

那么,有使用过 Windows 应用程序经验的人可以告诉我可能是什么原因吗?是因为我在网格中吗?我在某处看到它必须具有透明背景。这是。我一无所知,因为没有什么可做的,因为无论我往哪里看,我都会发现一些无关紧要的东西或死胡同。

编辑:只是为了澄清一下,动画有效。我通过按下用于其他用途的按钮暂时将其设置为运行。它有效。触摸矩形时它不起作用。

编辑二:我只是使用模板,只是在 ContentPanel 下添加了他们所说的内容。

【问题讨论】:

    标签: c# xaml windows-phone-8


    【解决方案1】:

    另一种/懒惰的方法是:

    <Button Click="moveClick" BorderThickness="0"  Background="Transparent">
        <Rectangle x:Name="red" 
         Fill="Red" Height="125" Width="125" Stroke="Pink" 
         StrokeThickness="10" Margin="94,184,213,336" 
         />
    <Button>
    

    在点击处理程序中,您可以使用从以下问题中获取的递归函数获取内部矩形:How to get children of a WPF container by type?

    public static T GetChildOfType<T>(this DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null) return null;
    
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);
    
            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }
        return null;
    }
    

    【讨论】:

      【解决方案2】:

      它自己的矩形在这里工作正常。 MouseLeftButtonDown 被调用。您放置它的方式很可能很重要。不查看更多 XAML 代码就无法猜测。

      猜测解决方法,也尝试使用Tap 事件并明确设置IsHitTestVisible="True"

      ......
      <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <StackPanel>
              <Rectangle MouseLeftButtonDown="moveClick" x:Name="red" 
                      Fill="Red" Height="125" Width="125" Stroke="Pink" 
                      StrokeThickness="10" Margin="106,196,225,348" 
                      Tap="red_Tap" IsHitTestVisible="True"
                      />
          </StackPanel>
      </Grid>
      ......
      

      当我使用此设置点击矩形时,两个事件都会被调用。当 IsHitTestVisible 设置为 false 时,两个事件都不会被调用,正如我所期望的那样。

      【讨论】:

      • 查看我的编辑以了解其放置方式的简短描述。
      • 好的检查了,也看不出有什么问题。我更新的答案显示了我如何测试它,与您的非常相似,并且两个事件都被调用。抱歉,如果我无法复制这个问题,除了这个答案之外,我只能提出任何建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      相关资源
      最近更新 更多