2015-11-19 49 views
1

下拉打開時,我需要在某些元素上添加背景。在WPF中添加BackDrop

我的意思 - 在引導時打開模式窗口 - 底色變得又黑又不可點擊(默認設置)(Live example)

我應該補充上下拉打開事件觸發,這將在一定添加一些背景(背景)元素並禁用此元素?

+0

有WPF中沒有這樣的術語(背景?)。菜單是一種特殊的窗口,看起來你希望它像一個普通的模式窗口(禁止父窗口交互,並可能提供一些視覺信號)。那爲什麼要用菜單?以模態方式打開另一個窗口,並使其看起來像菜單*。 – Sinatr

回答

0

我找到了解決方案。

我剛剛用ZIndex和Background添加了一些網格。

這個網格變得可見時,切換按鈕被選中,並在另一種情況下不可見(當點擊這個網格(覆蓋) - 然後我強制切換按鈕被點擊 - 這是我設法隱藏網格...東西簡單到模態背景的Bootstrap行爲)。

<Grid x:Name="Overlay" Panel.ZIndex="2" Grid.Row="1"> 
     <Grid.Background> 
      <SolidColorBrush Color="Black" Opacity=".3"/> 
     </Grid.Background> 
     <Grid.Style> 
      <Style TargetType="Grid"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsChecked, ElementName=FiltersButton}" Value="True"> 
         <Setter Property="Visibility" Value="Visible"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Style> 
     <Grid.Triggers> 
      <EventTrigger RoutedEvent="UIElement.MouseDown"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard> 
          <BooleanAnimationUsingKeyFrames Storyboard.TargetName="FiltersButton" Storyboard.TargetProperty="(ToggleButton.IsChecked)"> 
           <DiscreteBooleanKeyFrame KeyTime="0:0:00.0" Value="False" /> 
          </BooleanAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Grid.Triggers> 
    </Grid> 

也許有綁定的知名度邏輯另一種方式(更簡單或用更少的代碼)...

1

這裏是一個非常強大的模擬你想要的效果。

XAML:

<Grid> 
    <TextBlock Text="SomeContent" /> 
    <Button Content="Click" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Bottom" 
      Click="Button_Click"> 
     <Button.ContextMenu> 
      <ContextMenu Opened="ContextMenu_Opened" 
         Closed="ContextMenu_Closed"> 
       <MenuItem Header="Test" /> 
      </ContextMenu> 
     </Button.ContextMenu> 
    </Button> 
    <Grid x:Name="overlay" 
      Visibility="Collapsed" 
      Background="#50000000" /> 
</Grid> 

CS:

void Button_Click(object sender, RoutedEventArgs e) => ((Button)sender).ContextMenu.IsOpen = true; 
void ContextMenu_Opened(object sender, RoutedEventArgs e) => overlay.Visibility = Visibility.Visible; 
void ContextMenu_Closed(object sender, RoutedEventArgs e) => overlay.Visibility = Visibility.Collapsed; 

下面是如何工作的:(?背景)

想法是創建半透明層,其菜單打開時顯示。

應該很容易,以改善這一點:使用綁定,添加效果等