2016-10-21 4 views
0

特定の場所にフライアウトを表示したい。 XAMLでプレースメントターゲット要素を指定する必要がありますが、その要素を表示または相互作用させたくないということを考えれば、可能な限り「最も軽い」要素を使用していることを確認したいと思います。プレースメントターゲット要素のみが必要な場合に使用する要素

「推奨」または「正しい」要素はありますか?そうでない場合、使用する "最も軽い"要素は何でしょうか?または、私はこれを思っていますか?ボタンを使うべきですか?

答えて

1

特定の場所にフライアウトを表示したいとします。

FrameworkElementsの場所は、それらを保持するために使用しているパネルに基づいています。特定の場所に配置されているFrameworkElementに基づいてフライアウトを表示する場合は、Canvasを使用してFrameworkElementを配置できます。

XAMLでプレースメントターゲット要素を指定したいが、 "lightest"要素を使用していることを確認したい。

Flyout.ShowAtは、配置対象としてFrameworkElementをとります。だから私は、「軽い」要素は以下のような空のカスタムFrameworkElementのだろうと思う:

public class MyElement:FrameworkElement 
{ 
} 

そして、あなたは、XAMLに入れて、それを配置するキャンバスを使用することができます。

<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> 

コード - 後:

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private void btnClick_Click(object sender, RoutedEventArgs e) 
    { 
     Flyout flyout = new Flyout(); 
     TextBlock tbContent = new TextBlock 
     { 
      Text= "this is a flyout content" 
     }; 
     flyout.Content = tbContent; 
     flyout.ShowAt(myEle); 
    } 
} 
0

Gridは非常に軽い要素ですが、子要素のない単純なPanel由来のクラスです。 ButtonControlであり、視覚的な外観を構成する多くの子要素を生成するテンプレートを有することを意味する。

プログラムで表示されるフライアウトの位置を指定する目的のためだけにダミー要素を使用するとしますか?あなたが要素を完全に避けたいのであれば、おそらくPopupが良い選択でしょう。

関連する問題