2011-11-10 397 views
0

我一直在創建一個菜單,當你點擊一個按鈕時,它滑出並再次點擊它滑入。有點像android菜單系統的工作方式,雖然你不要拖動這個,你只需點擊它。Silverlight - Expression Blend,如何隱藏屏幕上的組件

所以我想知道你如何隱藏屏幕外的元素?我曾嘗試設置全局偏移量,但根據屏幕分辨率的不同,我仍然可以看到應該隱藏的矩形和圓圈。我確實使用了利潤率,但這意味着我會有巨大的利潤來隱藏元素,只是看起來不正確。我無法使用可見性,因爲我需要爲從按鈕下方進入的菜單設置動畫。我一直在使用表情混合4.

任何幫助將是偉大的?

那麼我解決了其中一個問題。我設法隱藏屏幕上的組件,將它們對齊到底部或左側,然後更改渲染變換值以將它們隱藏在屏幕外。我的新問題是當我點擊eclipse按鈕時,一個矩形應該填滿整個背景,但它只填充一部分。

嗨,感謝您的回覆喬爾,我實際上發現,通過設置工作的設計視圖的寬度和高度。但在不同的解決方案,我可以看到這不起作用。我對這個代碼是... 的XAML:

<UserControl.Resources> 
    <Style x:Key="ButtonStyle1" TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"/> 
           <VisualState x:Name="Pressed"/> 
           <VisualState x:Name="Disabled"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Ellipse x:Name="ellipse" Fill="#FF8D5216" Stroke="Black"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 
<Grid Margin="0" Background="Transparent" Height="384" VerticalAlignment="Bottom"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStateGroup"> 
      <VisualStateGroup.Transitions> 
       <VisualTransition GeneratedDuration="0:0:0.3"/> 
      </VisualStateGroup.Transitions> 
      <VisualState x:Name="Move"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="BlackBoarder"> 
         <DiscreteObjectKeyFrame KeyTime="0"> 
          <DiscreteObjectKeyFrame.Value> 
           <Thickness>0</Thickness> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
        <DoubleAnimation Duration="0" To="20" Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="BaseBoarder" d:IsOptimized="True"/> 
       </Storyboard> 
      </VisualState> 
      <VisualState x:Name="Down"/> 
      <VisualState x:Name="SlideAcross"/> 
      <VisualState x:Name="SlideBack"/> 
      <VisualState x:Name="FlipForward"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="BlackBoarder" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="BlackBoarder" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="180" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="BlackBoarder" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="180" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
       </Storyboard> 
      </VisualState> 
      <VisualState x:Name="FlipBack"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="BlackBoarder" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="BlackBoarder" d:IsOptimized="True"/> 
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

    <Grid x:Name="grid" Height="400" VerticalAlignment="Bottom" Background="Orange" RenderTransformOrigin="0.5,0.5" Margin="0,0,0,-21"> 
     <Grid.Projection> 
      <PlaneProjection/> 
     </Grid.Projection> 
     <Grid.RenderTransform> 
      <CompositeTransform TranslateY="360"/> 
     </Grid.RenderTransform> 

     <Rectangle x:Name="MovingButtonTab" Fill="Black" Height="15" Margin="0,-14,0,0" Stroke="Black" VerticalAlignment="Top" HorizontalAlignment="Center" Width="250" MouseLeftButtonDown="ButtonTab_MouseLeftButtonDown"/> 

     <Rectangle x:Name="BlackBoarder" Fill="Gray" Margin="0" Stroke="Black" RenderTransformOrigin="0.5,0.5"> 
      <Rectangle.Projection> 
       <PlaneProjection/> 
      </Rectangle.Projection> 
      <Rectangle.RenderTransform> 
       <CompositeTransform/> 
      </Rectangle.RenderTransform> 
     </Rectangle> 
     <Rectangle x:Name="TitleRect" Fill="Black" Height="20" Margin="0" Stroke="Black" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" /> 
     <sdk:Label Height="20" Margin="0" Width="219" Content="" Background="Orange" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5"/> 

    </Grid> 
    <Rectangle x:Name="BaseBoarder" Fill="Gray" Height="20" Stroke="Black" VerticalAlignment="Bottom"/> 

所以我猜主父網格視圖我要補充的XAML:

<RectangleGeometry Rect="0,0,640,480" /> 

而只是調整數所需尺寸?這仍然會有同樣的問題,但不是在所有的解決方案上工作?

此外,我創建的控件不透明,即使我已將父網格設置爲「透明」,但它仍具有「白色」背景。基本上它填充屏幕的高度,甚至可以在用戶點擊它之前達到菜單欄的高度。圍繞着這個嗎?

我解決了白色背景的解決方案。使用RenderTransform將對象從「基本」狀態的觀看區域移出似乎會導致此問題。使用利潤率,實際上解決了這個問題。我不能告訴你爲什麼,但我只是試了一下,它的工作。

再次感謝

回答

4

在Silverlight中,您需要將剪切區域添加到基本容器。

<Grid> 
    <Grid.Clip> 
     <RectangleGeometry Rect="0,0,640,480" /> 
    </Grid.Clip> 
    // other content 
</Grid> 

您需要修改Rect參數或添加一些綁定以匹配您的應用程序。

一個警告:混合尊重剪輯區域,所以一旦你添加它,你將無法看到被「畫外屏」繪製的元素了。