【问题标题】:WPF - setting visibility on code behind for a WebBrowser not workingWPF - 为 WebBrowser 不工作的代码设置可见性
【发布时间】:2017-09-13 19:28:20
【问题描述】:

我有两个元素,一个 WebBrowser 和一个 Slider,我试图根据用户打开的文档类型、PDF 或视频文件 (mp4) 隐藏一个并显示另一个。但是,目前,当我打开 PDF 文件时,WebBrowser 仍然隐藏。

在 MainWindow.xaml 中,我有

<WebBrowser x:Name="PDFView" Width="600" 
                    Height="410" Visibility="{Binding PDFVisible}">
</WebBrowser>

<FFmpegFramework:MediaElement Grid.Row="0" x:Name="MediaElement"
                    Height="400" Background="Gray"  Visibility="{Binding VideoVisible}"/>

在 MainWindow.xaml.cs 中,我有

else if (fileName.Contains("pdf"))
{

    MainWindowViewModel dataContext = this.DataContext as MainWindowViewModel;
    dataContext.PDFVisible = Visibility.Visible;
    dataContext.VideoVisible = Visibility.Collapsed;

    //PDFView.Navigate("file:///" + fileName);
}
else if (fileName.Contains("mp4"))
{
    MainWindowViewModel dataContext = this.DataContext as MainWindowViewModel;
    dataContext.PDFVisible = Visibility.Collapsed;
    dataContext.VideoVisible = Visibility.Visible;
}

在 MainWindowModel.cs 中,我有:

public Visibility PDFVisible
{
    get
    {
        return fPDFVisible;
    }
    set
    {
        this.SetProperty<Visibility>(ref fPDFVisible, value);
    }
}

public Visibility VideoVisible
{
    get
    {
        return fVideoVisible;
    }
    set
    {
        this.SetProperty<Visibility>(ref fVideoVisible, value);
    }
}

private Visibility fPDFVisible = Visibility.Collapsed;
private Visibility fVideoVisible = Visibility.Visible;

【问题讨论】:

  • 主视图模型是否实现了INotifyPropertyChanged?
  • 它实现了 BindableBase,我刚刚查了一下,它实现了 INotifyPropertyChanged
  • 顺便说一句,您为什么要在 xaml.cs 中而不是在视图模型中进行更改?
  • 你能详细说明一下吗? xaml.cs(后面的代码,选择文件类型)正在更改视图模型,我认为这反过来应该更改 XAML 中的绑定属性。我在这里错过了什么吗?你会怎么做?
  • 你确定你的“else if”代码块真的被执行了吗?还要确保 PDFView 控件的 DataContext 与 MainWindowViewModel 的实例相同。

标签: c# wpf xaml visibility


【解决方案1】:

您在 .xaml.cs 文件中执行此更改,而不是创建 objects 来更改 visibility。您可以直接通过控件名称更改visibility

if (fileName.Contains("pdf"))
{
    PDFView.Visibility = Visibility.Visible;
    MediaElement.Visibility = Visibility.Collapsed;
}
else if (fileName.Contains("mp4"))
{
    PDFView.Visibility = Visibility.Collapsed;
    MediaElement.Visibility = Visibility.Visible;
}

并且不要忘记在绑定中更改“Mode=TwoWay”。它还将更改ViewModel中的属性

<WebBrowser x:Name="PDFView" Width="600" 
            Height="410" Visibility="{Binding PDFVisible, Mode=TwoWay}" />

<FFmpegFramework:MediaElement Grid.Row="0" x:Name="MediaElement"
                 Height="400" Background="Gray"  Visibility="{Binding VideoVisible, Mode=TwoWay}" />

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2013-01-20
    • 2013-02-21
    • 1970-01-01
    • 2012-05-01
    • 2012-12-17
    • 2011-11-12
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多