none
WPF コントロールを前面に表示したい RRS feed

  • 質問

  • 時間の掛かる処理を行う場合に、ListBoxの前面にLabelを表示させたいと思います。

     <Grid x:Name="grid1" Background="#FFF5E9E9" Margin="0" >
            <Label x:Name="Label101" Content="  お待ち下さい・・・・・" HorizontalAlignment="Left" Height="48" Margin="71,190,0,0" VerticalAlignment="Top" Width="351" Padding="0" FontSize="20"  VerticalContentAlignment="Center" Visibility="Hidden">
             </Label>
            <ListBox x:Name="ListBox1" Margin="13,51,13,326"  TabIndex="1"/>
        </Grid>

    ところが、ListBoxが前面に表示されるのでLabel.Visibility=Visibleにしても見えません。
    コントロールのZ-indexを制御するにはどうすれば良いのですか。
    言語はVB.netでの回答をお願いします。

    2019年7月6日 7:28

回答

  • Panel.ZIndex添付プロパティを指定しないのであれば、XAML定義で弟の方ほど手前になります。

    Labelは、既定では背景色は透明です。そのためLabelを表示してもListBoxは消えず、ListBox上に文字が重なった表示になります。これを避けるためには、Labelの背景色を設定するか、またはListBoxのVisibilityをHiddenなどに変更するか、のいずれかが必要です。

    ちなみに背景色をシステムの規定色に設定するには、Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" を使用できます。

    • 回答としてマーク huahi11112 2019年7月8日 8:11
    2019年7月6日 23:08

すべての返信

  • LabelとListBoxの記述の順番を入れ替えてもLabel.Visibility=Visibleが効きません。

    GUIに制御が移らないようです。Acync/Awaitで非同期処理をする様にしていますが動作しません。時間の掛かる動作は一切やっていません。動作状況の詳細など、分かり次第報告します。

    2019年7月6日 7:51
  • Panel.ZIndex添付プロパティを指定しないのであれば、XAML定義で弟の方ほど手前になります。

    Labelは、既定では背景色は透明です。そのためLabelを表示してもListBoxは消えず、ListBox上に文字が重なった表示になります。これを避けるためには、Labelの背景色を設定するか、またはListBoxのVisibilityをHiddenなどに変更するか、のいずれかが必要です。

    ちなみに背景色をシステムの規定色に設定するには、Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" を使用できます。

    • 回答としてマーク huahi11112 2019年7月8日 8:11
    2019年7月6日 23:08
  • >Panel.ZIndex添付プロパティを指定しないのであれば、XAML定義で弟の方ほど手前になります。
    GridにはZIndex添付プロパティーが無いので、コードで記述するのは諦めます。手前に表示させたいコントロールをXAMLで下の方に記述することにします。

    Me.Label101.Visibility = Visibility.Visible を実行してもすぐに描画がされないのは、

     Await Task.Run(Sub() 'この下の処理が重く?、UIに制御が移らない
                                   重い処理() ’←1つのメソッドとしてまとめ、外に出した
       End Sub)

    ↑これで一応の解決を見ました。

    決して重い処理を行ってはいないのですが、こうしないとUIに制御が移らない現象が発生するのだということがわかりました。
    今回も御回答ありがとうございました。
    2019年7月8日 8:11
  • GridにはZIndex添付プロパティーが無いので、コードで記述するのは諦めます。

    ? GridはPanelの派生クラスですから、ZIndex添付プロパティを持っていますよ。

    添付プロパティは、XAMLでは

    <Label Panel.ZIndex="1" ...>

    C#からは

    Panel.SetZIndex(label1, 1);

    のように記述します。

    2019年7月8日 8:22