以下コードはウィンドウ内にパネルを使ってメッセージボックスを表現しています。
この場合に、よくあるMessageBoxのように、ボタン(OKボタンやキャンセルボタンなど)で状況に応じてイベントを起こしたいと思っていますが、どうすればよいか糸口すらつかめず悩んでおります。
通常、MessageBoxの場合、以下C#コードのように戻り値を得る事でその後にif文でボタンの動作を分けると思うのですが、同じような感じにしたいです。
C#
1MessageBoxResult flag = MessageBox.Show("OKですか?");
尚、メッセージボックスの表示非表示は、Layer_MessageBoxWindowをVisibilityをHiddenとVisibleで切替えていることとします。
また、メッセージウィンドウを表示している間は、他の領域に触れない(Layer_MessageBoxWindowがドックパネルで他領域を占有している)状況です。
環境:Visual Studio 2019
<MainWindow.xaml>
xaml
1 <!-- MessageBox Layer --> 2 <DockPanel x:Name="Layer_MessageBoxWindow" Visibility="Hidden" Opacity="0" Background="#50000000"> 3 <StackPanel x:Name="MessageBox" Margin="0" Orientation="Vertical" VerticalAlignment="Center"> 4 <StackPanel Margin="0" Orientation="Horizontal" HorizontalAlignment="Center" > 5 <window:MessageBoxWindow /> 6 </StackPanel> 7 </StackPanel> 8 </DockPanel> 9 10 <!-- Language --> 11 <StackPanel x:Name="Layer_SubWindow" VerticalAlignment="Center"> 12 <window:LanguageMenuWindow x:Name="LanguageMenuWindow" /> 13 </StackPanel>
<MessageBoxWindow.xaml>
xaml
1<UserControl x:Class="AppWPF.UserControlObjects.SubWindow.MessageBoxWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 mc:Ignorable="d" 7 d:DesignHeight="150"> 8 <Grid x:Name="gridMessageBoxWindow" Background="#FFEEEEEE" Width="600" > 9 10 <!-- レイアウト分割 --> 11 <Grid.RowDefinitions> 12 <RowDefinition Height="5"/> 13 <RowDefinition Height="Auto"/> 14 <RowDefinition Height="7*"/> 15 </Grid.RowDefinitions> 16 17 <!-- トップカラーバー --> 18 <Canvas Height="5" Margin="0" Background="#FF0071EF" Grid.Row="0"/> 19 20 <!-- メッセージ部分 --> 21 <StackPanel VerticalAlignment="Center" Margin="25,30,25,25" Grid.Row="1"> 22 <TextBlock x:Name="MessageText" Text="{Binding Path=textData.Text, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Margin="0" FontSize="18" FontWeight="Bold" TextWrapping="Wrap"/> 23 </StackPanel> 24 25 <!-- ボタン部分 --> 26 <StackPanel x:Name="PanelAllButton" Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="2" Margin="0,0,0,10"> 27 <Button x:Name="ButtonOK" Content="OK" VerticalAlignment="Center" Width="90" Height="35" Margin="10,0,10,0" Click="ButtonOK_Click" Visibility="Visible"/> 28 <Button x:Name="ButtonCancel" Content="Cancel" VerticalAlignment="Center" Width="90" Height="35" Margin="10,0,10,0" Click="ButtonCancel_Click"/> 29 </StackPanel> 30 31 </Grid> 32</UserControl>
2019/12/04追記:
回答の際に質問させていただいた内容を追記します。
内容としては別のユーザーコントロールでOKボタンを押し、メッセージウィンドウ(Layer_MessageBoxWindowのDockPanel)をVisibleまたはHiddenで表示切替して、OKボタンを押した結果を以下のような他のユーザーコントロール(LanguageMenuWindow)で受け取りたい場合となります。
尚表示非表示の処理に関しては、本文と違う為省略いたします。
※MainWindow.xamlにも以下xamlを読み込む部分を追記しました。
<LanguageMenuWindow>
Xaml
1<UserControl x:Class="AppWPF.UserControlObjects.SubWindow.LanguageMenuWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 mc:Ignorable="d" Width="108" Height="134"> 7 <Grid x:Name="LanguageMenuPannel" Height="191" VerticalAlignment="Top" Margin="0,0,0,-57"> 8 9 <StackPanel Margin="10,10,10,41"> 10 <RadioButton x:Name="radioButton_ENG" Content="English" Height="22" VerticalContentAlignment="Center" Checked="RadioButtonENG_Checked"/> 11 <RadioButton x:Name="radioButton_JPA" Content="日本語" Height="22" VerticalContentAlignment="Center" Checked="RadioButtonJPA_Checked" /> 12 </StackPanel> 13 <Button x:Name="OK" Content="OK" Margin="10,0,10,10" Height="20" VerticalAlignment="Bottom" Click="OK_Click"/> 14 15 </Grid> 16</UserControl>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/05 08:21
2019/12/09 05:59