2013-05-19 58 views
0

我實現它具有多行和多列一個小WPF應用程序。第0行和第0列包含MediaElement,第1行和第0列包含全屏按鈕。當用戶點擊全屏按鈕時,我想切換到只有兩行一列的網格。第0行和第0列將佔據MediaElement內部的大部分屏幕空間,第1行和第0列將顯示最小化按鈕,這將使原始UI恢復原樣。 在傳統的Windows中,我們用來切換託管WindowsMedia播放器的全屏面板的可見性以實現此行爲。我如何在WPF中實現這一點?在屏幕的特定部分拉近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

+0

一個或兩個代碼示例如何顯示我們已經嘗試過的內容? –

+0

@RobPerkins我已經添加了xamal代碼。 – user2243747

回答

1

你能做到這一點完全在XAML中使用切換按鈕並在其財產器isChecked觸發其將所有的列寬/高/行,你不希望看到0 。使用x:Name來命名你想改變的元素,這樣可以更容易地寫出觸發器。

爲了能夠訪問所有的控制,你應該定義包含了所有其他控件的父控件的觸發,例如在用戶控件,面板,DataTemplate或ControlTemplate中。爲了訪問不同控件上的屬性,請將其名稱用於設置器上的TargetName屬性。觸發器本身也有相應的SourceName屬性,所以您不必在ToggleButton本身上定義觸發器。

+0

謝謝。我試圖做到這一點,但無法訪問ToggleButton的觸發器內的其他控件請參閱後http://stackoverflow.com/questions/16634570/togglebutton-ischecked-trigger/16634797#16634797 – user2243747

+0

請參閱我的編輯,請。 – hbarck

0

最簡單的,你可以使用代碼來更改列的大小。像這樣的東西,有線到您的按鈕的點擊事件,將工作:

首先,命名您的網格:

<Grid Name="MyGrid"> 

然後,線材你的按鈕:

<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 

該代碼將有效切換要隱藏的列的寬度,t零,並將它們恢復到您在XAML中定義的內容。因爲你想動態地改變你的網格元素的大小,你需要在代碼的某處執行此操作。

你可以,當然,風格的觸發器定義這種行爲,或金屬絲的尺寸元素視圖模型綁定,但這些話題全由自己可能不屬於你的架構。由於您在按鈕上定義了帶有代碼隱藏行爲的XAML,因此我將代碼放在代碼隱藏中;關鍵是,你可以改變你的GridColumnDefinitionRowDefinition元素的大小來隱藏它們。

這避免了與模板或觸發問題,而且還引入了問題,這可能使你的東西更難維護,如果它是一個複雜的項目的一部分,「關注點分離」。