質問
2019年7月6日土曜日 7:28
時間の掛かる処理を行う場合に、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での回答をお願いします。
すべての返信 (4)
2019年7月6日土曜日 23:08 ✅回答済み | 1 票
Panel.ZIndex添付プロパティを指定しないのであれば、XAML定義で弟の方ほど手前になります。
Labelは、既定では背景色は透明です。そのためLabelを表示してもListBoxは消えず、ListBox上に文字が重なった表示になります。これを避けるためには、Labelの背景色を設定するか、またはListBoxのVisibilityをHiddenなどに変更するか、のいずれかが必要です。
ちなみに背景色をシステムの規定色に設定するには、Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" を使用できます。
2019年7月6日土曜日 7:51
LabelとListBoxの記述の順番を入れ替えてもLabel.Visibility=Visibleが効きません。
GUIに制御が移らないようです。Acync/Awaitで非同期処理をする様にしていますが動作しません。時間の掛かる動作は一切やっていません。動作状況の詳細など、分かり次第報告します。
2019年7月8日月曜日 8:11
>Panel.ZIndex添付プロパティを指定しないのであれば、XAML定義で弟の方ほど手前になります。
GridにはZIndex添付プロパティーが無いので、コードで記述するのは諦めます。手前に表示させたいコントロールをXAMLで下の方に記述することにします。
Me.Label101.Visibility = Visibility.Visible を実行してもすぐに描画がされないのは、
Await Task.Run(Sub() 'この下の処理が重く?、UIに制御が移らない
重い処理() ’←1つのメソッドとしてまとめ、外に出した
End Sub)
↑これで一応の解決を見ました。
決して重い処理を行ってはいないのですが、こうしないとUIに制御が移らない現象が発生するのだということがわかりました。
今回も御回答ありがとうございました。
2019年7月8日月曜日 8:22 | 1 票
GridにはZIndex添付プロパティーが無いので、コードで記述するのは諦めます。
? GridはPanelの派生クラスですから、ZIndex添付プロパティを持っていますよ。
添付プロパティは、XAMLでは
<Label Panel.ZIndex="1" ...>
C#からは
Panel.SetZIndex(label1, 1);
のように記述します。