在WPF中放大屏幕的特定部分

在WPF中放大屏幕的特定部分,wpf,layout,Wpf,Layout,我正在实现一个小的WPF应用程序,它有多行多列。第0行和第0列包含MediaElement,第1行和第0列包含全屏按钮。当用户点击全屏按钮时,我想切换到只有两行一列的网格。第0行和第0列将占据MediaElement内部的大部分屏幕空间,第1行和第0列将显示一个最小化按钮,该按钮将返回原始UI。 在传统windows中,我们用来切换承载WindowsMedia player的全屏面板的可见性以实现此行为。如何在WPF中实现这一点 添加我的XAML代码 <Window x:Class="Le

我正在实现一个小的WPF应用程序,它有多行多列。第0行和第0列包含MediaElement,第1行和第0列包含全屏按钮。当用户点击全屏按钮时,我想切换到只有两行一列的网格。第0行和第0列将占据MediaElement内部的大部分屏幕空间,第1行和第0列将显示一个最小化按钮,该按钮将返回原始UI。 在传统windows中,我们用来切换承载WindowsMedia player的全屏面板的可见性以实现此行为。如何在WPF中实现这一点

添加我的XAML代码

<Window x:Class="LearnEnglish.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="5*" />
      <RowDefinition Height="1*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="5*" />
      <ColumnDefinition Width="2*" />
      <ColumnDefinition Width="2*" />
      <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <MediaElement LoadedBehavior="Manual"
                  Name="me"
                  Source="C:\Users\Pritam\Documents\Freecorder\Screen\Northern Ireland Scene 1  LearnEnglish  British Council.wmv"
                  Volume="{Binding ElementName=txtVolume,Path=Text}"
                  Grid.ColumnSpan="2">

    </MediaElement>

    <Button Click="Button_Click"
            Grid.Row="1"
            Margin="4">Play</Button>
    <Button Click="Button_Click"
            Grid.Row="1"
            Grid.Column="1"
            Margin="4">Full Screen</Button>
    <Button Click="Button_Click"
            Grid.Row="1"
            Grid.Column="1"
            Margin="4"
            Visibility="Hidden">Restore</Button>

  </Grid>
</Window>

玩
全屏
恢复
当用户单击“全屏”按钮时,我希望我的“MediaElement”占据大部分屏幕空间(隐藏所有其他控件),并将“还原”按钮保留在屏幕右下角

问候,,
Hemant

您可以在XAML中完全做到这一点,方法是在其IsChecked属性上使用一个ToggleButton和一个触发器,该属性将您不希望看到的所有列/行的宽度/高度设置为0。使用x:Name来命名要更改的元素,这将使编写触发器更容易


为了能够访问所有控件,您应该在包含所有其他控件的父控件上定义触发器,例如在UserControl、panel、DataTemplate或ControlTemplate中。要访问不同控件上的属性,请将它们的名称用于setters上的TargetName属性。触发器本身也有相应的SourceName属性,因此您不必在ToggleButton本身上定义触发器。

最简单的是,您可以使用代码更改列的大小。类似的东西,连接到按钮的点击事件,可以工作:

首先,命名您的网格:

 <Grid Name="MyGrid">
该代码将有效地将要隐藏的列的宽度切换为零,并将它们恢复为您在XAML中定义的宽度。因为您希望动态地改变网格元素的大小,所以需要在某个地方的代码中这样做

当然,您可以在样式触发器中定义此行为,或者将大小元素关联到ViewModel绑定,但这些主题本身可能与您的体系结构无关。由于您使用按钮上的代码隐藏行为定义了XAML,因此我将代码放在代码隐藏中;关键是,您可以改变
网格
列定义
行定义
元素的大小来隐藏它们


这避免了模板或触发的问题,但也引入了“关注点分离”问题,如果是复杂项目的一部分,这可能会使您的东西更难维护

一两个代码示例如何,告诉我们您已经尝试了什么?@RobPerkins我已经添加了xamal代码。谢谢。我试图这么做,但无法访问触发器内的其他控制按钮,请参阅文章
    <Button Click="Button_Click" Grid.Row="1" Margin="4">Play</Button>
    <Button Name="FullScreenButton" Click="FullScreenButton_Click"  Grid.Row="1" Grid.Column="1" Margin="4">Full Screen</Button>
    <Button Name="RestoreButton" Click="RestoreButton_Click"  Grid.Row="1" Grid.Column="1" Margin="4" Visibility="Hidden">Restore</Button>
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    meVid.Play()
End Sub

Private Sub FullScreenButton_Click(sender As Object, e As RoutedEventArgs)
    MyGrid.ColumnDefinitions.Item(2).Width = New GridLength(0)
    MyGrid.ColumnDefinitions.Item(3).Width = New GridLength(0)
    FullScreenButton.Visibility = Windows.Visibility.Hidden
    RestoreButton.Visibility = Windows.Visibility.Visible
End Sub

Private Sub RestoreButton_Click(sender As Object, e As RoutedEventArgs)
    MyGrid.ColumnDefinitions.Item(2).Width = New GridLength(2, GridUnitType.Star)
    MyGrid.ColumnDefinitions.Item(3).Width = New GridLength(1, GridUnitType.Star)
    FullScreenButton.Visibility = Windows.Visibility.Visible
    RestoreButton.Visibility = Windows.Visibility.Hidden
End Sub