0

Window.ShowDialog を使用し、DialogResult を設定して、ユーザーによる削除アクションを確認するための警告ウィンドウを作成しました。TextBlock警告テキストが表示されず、理由がわからないことを除いて、すべて正常に動作します。これが私のものWindowです:

<Window x:Class="RoVCo.Windows.VerifyWindow"
        ....
        WindowStyle="None" Padding="10" ResizeMode="NoResize">
        <StackPanel>
            <TextBlock Height="Auto" Text="{Binding TBText, Mode=OneWay}" Foreground="Yellow" TextWrapping="Wrap" />
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
                <Button Content="Cancel" Margin="10,0" Width="50" Click="CancelVerify" />
                <Button Content="OK" Width="50" Click="ConfirmVerify" />
            </StackPanel>
        </StackPanel>
</Window>

そしてクラス:

public partial class VerifyWindow : Window
{
    public VerifyWindow(string content)
    {
        InitializeComponent();
        _text = content;
    }
    private string _text = "";
    public string TBText { get { return _text; } }

    private void CancelVerify(object sender, RoutedEventArgs e)
    {
        this.DialogResult = false;
        this.Close();
    }
    private void ConfirmVerify(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
        this.Close();
    }
}

そして、私はそれを次のように呼びます:

var window = new RoVCo.Windows.VerifyWindow("Removing this skill will erase all DP spent on it from all levels. Continue?");
if (window.ShowDialog() == false) return;
4

3 に答える 3

0

で使用しているプロパティが1つだけの場合は、すべてのロジックを追加するよりも、 aをDialog使用する方が適切だと思います。DependancyPropertyINotifyPropertyChanged

public partial class VerifyWindow : Window
{
    public VerifyWindow(string content)
    {
        InitializeComponent();
        TBText = content;
    }

    public static readonly DependencyProperty TBTextProperty =
        DependencyProperty.Register("TBText", typeof(string), typeof(VerifyWindow), new UIPropertyMetadata(string.Empty));

    public string TBText
    {
        get { return (string)GetValue(TBTextProperty); }
        set { SetValue(TBTextProperty, value); }
    }

    private void CancelVerify(object sender, RoutedEventArgs e)
    {
        this.DialogResult = false;
        this.Close();
    }
    private void ConfirmVerify(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
        this.Close();
    }
}
于 2013-03-01T01:26:55.007 に答える
0

バインドを使用するには、ローカル プロパティをパブリックにする必要があり、通知プロパティまたは依存関係プロパティのいずれかが必要です。

于 2013-03-01T01:00:20.683 に答える
0

この解決策を試すことができます。

  1. VerifyWindow コンストラクターを次のように変更します。

    public VerifyWindow() { InitializeComponent(); }

TBText と _text コードを削除します。

  1. VerifyViewModel という新しいクラスを作成します。

    public class VerifyViewModel : INotifyPropertyChanged { public VerifyViewModel(string content) { this.TBText = content; }

    public string TBText { get; private set; }
    
    #region INPC code - can create an abstract base view model class and put this there instead
    
    public event PropertyChangedEventHandler PropertyChanged;
    
    protected void OnPropertyChanged(string propertyName)
    {
        this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }
    
    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        var handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, e);
        }
    }
    #endregion
    

    }

  2. このコードを以下のように呼び出します

    var viewmodel = new VerifyViewModel ("このスキルを削除すると、すべてのレベルで消費されたすべての DP が消去されます。続けますか?");

        var window = new VerifyWindow
        {
            DataContext = viewmodel
        };
        if (window.ShowDialog() == false) return;
    
于 2013-03-01T01:07:08.263 に答える