2013-05-19 2 views
0

여러 행과 여러 열을 가진 작은 WPF 응용 프로그램을 구현하고 있습니다. 0 번째 행과 0 번째 열에는 MediaElement가 있고 첫 번째 행에는 0 번째 열에 전체 화면 버튼이 있습니다. 사용자가 전체 화면 버튼을 클릭하면 2 행과 1 열만있는 gird로 전환하고 싶습니다. 0 번째 행과 0 번째 열은 MediaElement가있는 대부분의 화면 공간을 차지하며 첫 번째 행과 0 번째 열은 원래 UI를 다시 가져 오는 최소화 버튼을 표시합니다. 전통적인 윈도우에서는이 동작을 위해 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

0으로보고 싶지 않아 당신은/행 모든 열의 너비/높이를 설정하는 ToggleButton을하고의 IsChecked 재산에 트리거를 사용하여 XAML에서 완전히 그렇게 할 수 x : Name을 사용하여 변경하려는 요소의 이름을 지정하면 트리거를 더 쉽게 작성할 수 있습니다.

모든 컨트롤에 액세스하려면 부모 컨트롤에 트리거를 정의해야합니다.이 컨트롤에는 다른 모든 컨트롤이 들어 있습니다. UserControl, 패널, DataTemplate 또는 ControlTemplate에서. 다른 컨트롤의 속성에 액세스하려면 setters의 TargetName 속성에 해당 이름을 사용합니다. Trigger 자체에는 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 0으로 설정하고 XAML에서 정의한 값으로 복원합니다. 그리드 요소의 크기를 동적으로 변경하기를 원하기 때문에 이것을 코드 어딘가에서 할 필요가 있습니다.

물론 스타일 트리거에서이 동작을 정의하거나 크기 요소를 ViewModel 바인딩에 연결할 수 있지만 그 자체는 아키텍처와 관련되지 않을 수도있는 주제입니다. 단추에 코드 숨김 동작을 사용하여 XAML을 정의 했으므로이 코드를 코드 숨김에 넣습니다. 요점은, 사용자가 GridColumnDefinitionRowDefinition 요소의 크기를 다양하게하여이를 숨기는 것입니다.

이렇게하면 템플릿이나 트리거링 관련 문제를 피할 수 있지만 복잡한 프로젝트의 일부인 경우 유지 관리가 어려울 수있는 "관심사 분리"문제가 발생합니다.

관련 문제