【问题标题】:Changing MainWindow background color WPF更改 MainWindow 背景颜色 WPF
【发布时间】:2011-11-24 17:16:20
【问题描述】:

我正在尝试使用名为 EditColorDialog 的对话框更改 MainWindow 的背景颜色。该对话框可以很好地读取主窗口的当前背景颜色,但我似乎无法让它更改该颜色。

public partial class EditColorDialog : Window
{
    ColorDialog colorPicker = new ColorDialog();  //this is a colorpicker
    MainWindow mw = new MainWindow();

    public ColorDialog()
    {
        InitializeComponent();
        rect.Fill = mw.background;  //reads the color off the main window
    }

    private void rect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        colorPicker.Owner = this;
        if ((bool)colorPicker.ShowDialog())
        {
            //selects new color from colorpicker
            rect.Fill = new SolidColorBrush(colorPicker.SelectedColor);
        }
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {
        mw.background = rect.Fill;
        this.Close(); 
    }
}

我在主窗口代码中使用这个属性

public Brush background
{
    get { return main_window.Background; }
    set { main_window.Background = value; }   
}

【问题讨论】:

  • 在哪个部分?我正在使用一个名为“背景”的属性。
  • 属性“应该”在 PascalCase 中。

标签: c# wpf dialog


【解决方案1】:

每次创建这样的对话框时都会创建一个新的 MainWindow。不是个好主意。

如果有的话,您应该在应用程序启动时设置Application.MainWindow。然后像这样设置引用:

MainWindow mw = (MainWindow)Application.Current.MainWindow;

只需使用nw.Background,您的该属性似乎是静态调用的非静态包装器。这样做你已经有了主窗口。

【讨论】:

    【解决方案2】:

    为什么你的EditColorDialog 包含另一个new MainWindow?我猜你想要一个对现有 MainWindow 的引用,它打开 EditColorDialog 而不是一个新的。我猜这就是 H.B.意思是,您是否有一个属性 *b*ackground,但您的 MainWindow 已经包含一个名为 *B*ackground 的属性,请注意大写“B”。关闭对话框时,您现在可以在传递的 MainWindow 中设置 Background 属性。

    【讨论】:

    • 我想我需要对属性进行一些阅读。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2015-10-10
    • 2010-11-19
    • 1970-01-01
    • 2013-01-15
    • 2019-05-15
    • 2012-04-11
    相关资源
    最近更新 更多