2013-08-31 2 views
1

명확히하기 위해 ApplicationBar를 LayoutRoot 그리드 위에 놓고 싶습니다. 원하는 효과는 다음과 같다 : 물론어떻게 Applicationbar 상단에 요소를 설정할 수 있습니까 (또는 레이아웃을 알고 있어야합니까?).

<StackPanel> 
    <Grid x:Name="LayoutRoot" Background="Transparent"> 
    </Grid> 
    <phone:PhoneApplicationPage.ApplicationBar> 
     <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
     </shell:ApplicationBar> 
    </phone:PhoneApplicationPage.ApplicationBar> 
</StackPanel> 

는 페이지의 루트 태그에 있어야하기 때문에 위의 코드가 작동하지 않습니다,하지만 난 그게 한 소원 않습니다.

누구든지이 효과를 만들 수있는 방법을 알고 있습니까? 완벽한 솔루션 일 필요는 없으며 모든 솔루션을 복제 할 수 있습니다.

요청을 통해 구체적인 문제에 대해 자세히 설명합니다.

current layout

내가 응용 프로그램 바의 상단에 '휴식'에 '하나 뿐인 빛'제어하려면,과 같이 :

correct layout

아래 그림은 내가 현재 가지고있는 것입니다

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <DrawingSurface x:Name="DrawingSurfaceBackground" Loaded="DrawingSurfaceBackground_Loaded" /> 
    <ScrollViewer Name="LightControl" Height="200" VerticalAlignment="Bottom" Visibility="Collapsed"> 
     <Grid Margin="12,0,12,0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <TextBlock Grid.Column="0" Grid.Row="0" VerticalAlignment="Top" Text="Ambient Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="0" Name="AmbientLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="AmbientLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" Text="Diffuse Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="1" Name="DiffuseLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="DiffuseLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="2" VerticalAlignment="Top" Text="Specular Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="2" Name="SpecularLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="SpecularLightSlider_OnValueChanged" /> 
     </Grid> 
    </ScrollViewer> 
</Grid> 

<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Center" Click="Center_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Wireframe.png" Text="Wireframe" Click="Rasterizer_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Light" Click="Light_Click" /> 
    </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 
:하지 적어도 확실히

그리고 마지막으로하지만, 여기에 관련 XAML입니다

읽고 도와 주셔서 감사합니다.

+0

응용 프로그램 막대가 정의 된 위치에 문제가 없습니다. 레이아웃 루트 아래의 xaml 코드에 문제가 있음이 분명합니다. XAML 코드를 게시하십시오. 수정하기 쉽습니다. –

+0

방금 ​​게시했습니다. – Nico

답변

1

(아마도 페인트로 그려진 작은 이미지가 원하는 시각 효과를 이해하는 데 도움이 될 수 있습니다) 달성하고자하는 것을 이해 도와주세요 응용 프로그램 막대 투명없는 : Height="150" 그래서 두 슬라이더가 맞는 완전히 응용 프로그램 표시 줄에서 불투명도를 제거 :

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <DrawingSurface x:Name="DrawingSurfaceBackground" Loaded="DrawingSurfaceBackground_Loaded" /> 
    <ScrollViewer Name="LightControl" Height="150" VerticalAlignment="Bottom" Visibility="Collapsed"> 
     <Grid Margin="12,0,12,0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <TextBlock Grid.Column="0" Grid.Row="0" VerticalAlignment="Top" Text="Ambient Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="0" Name="AmbientLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="AmbientLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" Text="Diffuse Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="1" Name="DiffuseLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="DiffuseLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="2" VerticalAlignment="Top" Text="Specular Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="2" Name="SpecularLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="SpecularLightSlider_OnValueChanged" /> 
     </Grid> 
    </ScrollViewer> 
</Grid> 

<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Center" Click="Center_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Wireframe.png" Text="Wireframe" Click="Rasterizer_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Light" Click="Light_Click" /> 
    </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 

나는 실제로 ScrollViewer의 높이를 변경 Opacity="0". 투명 응용 프로그램 바 이제

은 : 페이지의 끝은 실제로 어디

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <DrawingSurface x:Name="DrawingSurfaceBackground" Loaded="DrawingSurfaceBackground_Loaded" /> 
    <ScrollViewer Name="LightControl" Height="150" Margin="0,0,0,70" VerticalAlignment="Bottom" Visibility="Collapsed"> 
     <Grid Margin="12,0,12,0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <TextBlock Grid.Column="0" Grid.Row="0" VerticalAlignment="Top" Text="Ambient Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="0" Name="AmbientLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="AmbientLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" Text="Diffuse Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="1" Name="DiffuseLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="DiffuseLightSlider_OnValueChanged" /> 
      <TextBlock Grid.Column="0" Grid.Row="2" VerticalAlignment="Top" Text="Specular Light" Style="{StaticResource PhoneTextLargeStyle}" /> 
      <Slider Grid.Column="1" Grid.Row="2" Name="SpecularLightSlider" Minimum="0.0" Maximum="2.0" 
       Value="1.0" ValueChanged="SpecularLightSlider_OnValueChanged" /> 
     </Grid> 
    </ScrollViewer> 
</Grid> 

<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" Opacity="0"> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Center" Click="Center_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Wireframe.png" Text="Wireframe" Click="Rasterizer_Click" /> 
     <shell:ApplicationBarIconButton IconUri="/Toolkit.Content/ApplicationBar.Center.png" Text="Light" Click="Light_Click" /> 
    </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 

당신은 UI 요소 (들)을 투명하게하기 위해 응용 프로그램 막대를 요구하기 때문에, 당신의 케이스 ScrollViewer에, 알고 응용 막대가 끝납니다. 그래서 하단에서 70 마진을 추가하여 : Margin="0,0,0,70" "위에"문제를 해결할 것입니다.

+0

아, 죄송합니다. 투명 애플리케이션 바가 다른 답변자의 조언을 듣고 저에게 맡겨졌습니다. 그러나 굉장한 대답! 그래서 질문 : 다른 해상도가 테스트되면 Margin = "0,0,0,70"은 비례하여 변환됩니까? 나는 확실히 이것을 시험 할 것이다. 그러나 만일 그것이했다면 그것은 굉장 할 것이다. 도와 줘서 고마워, 모두 돌아왔다면 다시 올거야. 추신 : 또한 150 높이 팁 주셔서 감사합니다. – Nico

+0

대답은 예입니다! 나는 Margin이 절대 픽셀 기반의 위치 지정 속성이라고 생각했지만 자동으로 다른 해상도를 조정합니다. 승리! – Nico

+1

실제로는 70은 아니지만 72-70이 더 낫습니다.) 다음을 확인하십시오. "세로 모드의 앱 바 높이와 가로 모드의 너비는 72 픽셀로 고정되어 있으며 수정할 수 없습니다. 앱 표시 줄을 설정할 수 있습니다 표시하거나 숨길 수 있습니다. " –

1

AppBar 레이아웃 위치를 수정하거나 다른 요소 안에 배치 할 수 없습니다. ApplicationBar는 UIElement, FrameworkElement 또는 Control 속성이 아닌 페이지 자체의 속성이므로 항상 페이지 수준에서 선언해야합니다.

"레이아웃 격자 위에 놓으십시오"라는 뜻을 정확히 이해하지 못합니다. 레이아웃 격자를 ApplicationBar 아래에 (Z 순서대로) 배치하려는 경우 다음과 같은 값으로 불투명도 속성을 추가 할 수 있습니다. 1을 ApplicationBar에 추가하면 페이지 내용이 전체 페이지를 사용하고 ApplicationBar가 내용 위에 배치됩니다. 이것이 당신이 원하는 효과입니까?

첫 번째가로되어 있지 않으면, 내가 당신이 그래서 여기에 두 가지 솔루션은

+0

나는 그보다 더 잘할 수 있으며, 일부 스크린 샷을 제공하고 원래 게시를 업데이트했습니다. 도움을 주셔서 감사합니다. – Nico

+0

안녕 니코, ​​스크린 샷을 보내 주셔서 감사합니다. 불투명도가없는 appbar를 놓으면 위의 모든 내용의 위치를 ​​변경해야합니다. 이 효과는 요소에 고정 된 크기를 사용하기 때문에 발생하는 것으로 보이므로 화면에서 사용할 수있는 공간보다 더 많은 공간이 필요합니다. 레이아웃을위한 xaml 코드를 넣을 수 있습니까? –

+0

불투명도를 0으로 설정하는 것은 내가 원했던 것처럼 보이지 않습니다. (더 멋지게 보이지만). 여기 스크린 샷이 있습니다. http://i.imgur.com/89DzcKh.jpg 질문에 XAML 코드를 포함하도록 질문을 편집했습니다. – Nico