如果我只需要一个放置目标元素,那么使用什么元素

时间:2016-10-21 08:31:23

标签: xaml uwp

我想在特定的地方展示一个弹出窗口。我想在XAML中指定一个放置目标元素,但我想确保我使用“最轻”元素,因为我不希望该元素可见或与之交互。

是否有“推荐”或“正确”元素可供使用?如果没有,那么“最轻”的元素会用到什么?或者我是否过度思考这个并且应该只使用一个按钮?

2 个答案:

答案 0 :(得分:1)

  

我想在特定的地方展示一个弹出窗口。

FrameworkElements的位置基于您用来保存它们的面板。如果您想根据放置在特定位置的FrameworkElement显示弹出按钮,可以使用Canvas来定位FrameworkElement。

  

我想在XAML中指定一个放置目标元素,但我想确保使用"最轻的"元素可能。

Flyout.ShowAt将FrameworkElement作为其展示位置目标。所以我认为"最轻的" element将是一个空的自定义FrameworkElement,如下所示:

if(feature.geometry.type === 'Point') {
    if(turf.inside(feature, bufferPolygon)) {
        console.log("inside");
        feature.properties.feedType === 'warning' ? warningsNearBy++ : incidentsNearBy++;
    }
} else {
    if(feature.geometry.type === 'GeometryCollection') {
        $.each(feature.geometry.geometries, function(index, geo) {
            if(geo.type === 'MultiPolygon') {
                //console.log('MP:', geo.coordinates[0]);
                var convertToPolygon = turf.polygon(geo.coordinates[0]);
                console.log('convertToPolygon:',convertToPolygon);
                //console.log('MP:intersect',turf.intersect(polygon, bufferPolygon));
                var isIntersecting = turf.intersect(convertToPolygon, bufferPolygon);
                if(isIntersecting) {
                    feature.properties.feedType === 'warning' ? warningsNearBy++ : incidentsNearBy++;
                }
            } else if(geo.type === 'GeometryCollection') {
                console.log('GC:', geo);
            }
        });
    } else {
        console.log('not geo collection:', feature.geometry.type);
    }
}

你可以将它放入XAML并使用Canvas来定位它:

public class MyElement:FrameworkElement
{
}

代码隐藏:

<Page
  x:Class="PopupSample.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:PopupSample"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d">

<Canvas>
    <Button Name="btnClick" Canvas.Left="50" Canvas.Top="500" Click="btnClick_Click">Click Me</Button>
    <local:MyElement x:Name="myEle" Canvas.Left="100" Canvas.Top="100"></local:MyElement>
</Canvas>

答案 1 :(得分:0)

Grid是一个非常轻的元素,它只是一个简单的Panel派生类,没有任何子元素。 ButtonControl,意味着它有一个模板,可以创建构成其视觉外观的许多子元素。

您是否想要使用虚拟元素仅仅是为了指定将以编程方式显示的弹出按钮的位置?如果你想完全避免这个元素,那么Popup可能是更好的选择。