Window.ShowDialog 在 return 上失败

Window.ShowDialog failes on return

我有一个自定义输入对话框,要求输入用户名和响应(因为原因)以在我的应用程序中执行特定操作。用户单击主 window 上的一个按钮,对话框就会按预期显示。

用户然后输入 his/her 名称和原因并单击确定。然后对话框关闭,但我(程序)从未收到答案。这是我的 XAML 输入对话框:

<Window x:Class="Sequence_Application_2.GUI.ForcedRackInput"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="Forcera Rack" Height="300" Width="300"
    WindowStartupLocation="CenterScreen">


<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="21*"/>
        <ColumnDefinition Width="274*"/>
    </Grid.ColumnDefinitions>
    <TextBox Name="OperatorNameText"  HorizontalAlignment="Left" Height="23" Margin="15,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Grid.ColumnSpan="2"/>
    <Label x:Name="label" Content="Namn:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
    <Label x:Name="label1" Content="Orsak:" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
    <Border BorderThickness="1" BorderBrush="Black" Grid.ColumnSpan="2" Margin="0,0,0,0.5">
        <TextBox Name="ReasonText" Margin="15,98,15,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="116" />
    </Border>

    <Button Name="OkButton"    IsDefault="True" Content="OK" Click="OkButtonPressed"  HorizontalAlignment="Left" Margin="26.202,233,0,0" VerticalAlignment="Top" Width="75" Cursor="Arrow" Grid.Column="1"/>
    <Button Name="CancelButton" IsCancel="True" Content="Avbryt" Margin="152.202,233,47,0" VerticalAlignment="Top" Cursor="Arrow" Grid.Column="1"/>

</Grid>
</Window>

这里是 "behind code":

namespace Sequence_Application_2.GUI
{
using System.Windows;

public partial class ForcedRackInput : Window
{

    public string OperatorName { get { return OperatorNameText.Text; }  }
    public string ForcedRackReason { get { return ReasonText.Text; } }

    public ForcedRackInput()
    {
        InitializeComponent();
    }

    private void OkButtonPressed(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
    }


}
}

这就是我调用代码的方式(来自模型,而不是 "window class")

public void ForceClosingRack(Flow forcedFlow)
    {
        var forcedRackWindow = new ForcedRackInput();

        string operatorName = "";
        string reasonForForced = "";

        if( forcedRackWindow.ShowDialog() == true)
        {
            operatorName = forcedRackWindow.OperatorName;
            reasonForForced = forcedRackWindow.ForcedRackReason;

        }

    } // code jumps from "if(forcedRackWindow.... to this line when ok is clicked in the dialog

寻找解决方案已经有一段时间了,我正准备转行

感谢您的宝贵时间

我的猜测是问题不在代码中,这似乎没问题,但在您的 if 语句中。

当您 运行 您的程序处于 Debug 模式时,它应该按预期工作。

我的猜测是,您在 if 语句中分配了变量 operatorNamereasonForForced,但它们没有在程序的其他任何地方使用,因此整个 if 语句被编译器忽略,并且在 运行 处于 Release 模式时不存在。

根据变量值嵌入不同行为的代码中的一个小修改可以证明我的猜测:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var forcedRackWindow = new ForcedWindow();

    string operatorName = "foo";
    string reasonForForced = "foo";

    if (forcedRackWindow.ShowDialog() == true)
    {
        operatorName = forcedRackWindow.OperatorName;
        reasonForForced = forcedRackWindow.ForcedRackReason;
    }

    if(!operatorName.Equals(reasonForForced))
    {
        MessageBox.Show("We are not the same");
    }
}