wpf 需要隐藏图片上的第1页时,我会点击按钮上的第2页c#

4smxwvx5  于 2023-08-07  发布在  C#
关注(0)|答案(1)|浏览(87)

需要隐藏图片Page1.xaml当我将点击按钮Page2 c# wpf请需要示例代码
我正在尝试这个,但它没有任何工作
Page2.xaml.cs

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Page1 p1 = new Page1();
            p1.pic.Visibility = Visibility.Visible;
        }

字符串
Page1.xaml与图片什么我需要隐藏

<Image x:Name="gear111" x:FieldModifier="public" HorizontalAlignment="Left" Height="114" VerticalAlignment="Top" Width="114" Source="/gear1.png" Margin="676,461,0,0" Grid.Column="1"/>

46qrfjad

46qrfjad1#

真希望能这么简单在WPF中,页面彼此隔离。换句话说,您的Page2不知道Page1拥有哪些控件。你也不能通过这种方式隐藏Page1上的控件,因为当你离开Page1时,它会从内存中卸载,你所做的任何更改都会丢失(除非你保存它们)。此外,您最有可能通过使用new示例来导航到Page1,该示例重置页面状态(即,执行代码并再次加载图像)。您可以通过使用MVVM (Model-View-ViewModel)来监视两个页面并将数据从一个页面传递到另一个页面,但是,我认为这种方法是徒劳的。但无论如何,这是如何做到的:

  • 首先,创建一个新的ViewModel类:
class ImageViewModel : INotifyPropertyChanged
{

    public ImageViewModel(Visibility visibility)
    {
        _imageVisibility = visibility;
    }
    private Visibility _imageVisibility;

    public Visibility ImageVisibility
    {
        get { return _imageVisibility; }
        set
        {
            _imageVisibility = value;
            OnPropertyChanged("ImageVisibility");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string p)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(p));
    }
}

字符串

  • 其次,将ImageVisibility属性绑定到刚刚创建的ViewModel类中定义的Visibility属性:
<Image x:Name="gear111" ... Visibility="{Binding ImageVisibility}"/>

  • 第三,将DataContext添加到Page1(您的图像所在的位置)。这将数据从ViewModel类传递到Page1上的Image
public Page1(Visibility visibilty)
 {
     InitializeComponent();
     DataContext = new ImageViewModel(visibilty);
 }
 public Page1()
 {
     InitializeComponent();
     DataContext = new ImageViewModel(Visibility.Visible);
 }

  • 最后,将此代码添加到Page2上的Button_Click事件中。单击该按钮时,将创建一个新的Window示例,该示例显示对Page1所做的更改。
private void Button_Click(object sender, RoutedEventArgs e)
{
    Window win = new Window();
    win.Content = new Page1(Visibility.Collapsed);
    win.Show();
}


请注意,我上面提到的页面限制仍然适用于这里。您可以通过将Visibility中的更改保存到bool设置(在Properties中的Settings.settings中创建)或应用程序可以在加载页面之前读取的本地文本文件中,使Visibility中的更改保持不变。
我仍然强烈建议您熟悉MVVM(作为初学者,您不需要完全掌握它),并避免在不必要的情况下使用Windows/Pages。页面主要用于导航目的或通过Web浏览器查看。对于独立应用程序,MainWindow.xaml是您所需要的;你只需添加更多就能实现你想要的。了解WPF的基础知识-UI ControlsPropertiesEventsClassesData BindingProject Structure等-将使您自己更容易。

相关问题