2016-12-14 92 views
2

我正在模態對話框中彈出(我不確定關於確切的UX術語)以內聯方式顯示,在帶有背景變暗的控件或窗口內。WPF中的簡單彈出對話框(覆蓋在窗口內)

視覺例如

example

我嘗試是把一個<ContentPresenter />彈出的XAML裏面,然後就實例化它是這樣的:

<local:Popup Grid.RowSpan="2"> 
    <TextBlock Text="Popup test..." /> 
</local:Popup> 

然而,XAML取代整個Popup XAML而不是放在ContentPresenter所在的位置。

問: ContentPresenter在這裏如何正確使用?

Popup.xaml

<ContentControl 
    x:Class="[...].Popup" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:[...]" 
    mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="300"> 
    <Grid Background="#7f000000"> 
     <Grid Background="White" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <StackPanel Margin="20"> 
       <TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType=UserControl}}" FontSize="20" /> 
       <ContentPresenter /> 
      </StackPanel> 
     </Grid> 
    </Grid> 
</ContentControl> 

Popup.xaml.cs

using System.Windows; 

namespace [...] 
{ 
    public partial class Popup : ContentControlBase 
    { 
     public static DependencyProperty TitleProperty = DependencyProperty.Register(nameof(Title), typeof(string), typeof(Popup)); 
     public string Title 
     { 
      get 
      { 
       return (string)GetValue(TitleProperty); 
      } 
      set 
      { 
       SetValue(TitleProperty, value); 
      } 
     } 

     public Popup() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

回答

2

您的彈出窗口的內容應該定義爲一個控件模板的ContentPresenter來這裏正常工作。請參考下面的示例代碼。

Popup.xaml:

<ContentControl 
x:Class="WpfApplication1.Popup" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:local="clr-namespace:WpfApplication1" 
mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="300" 
x:Name="popup"> 
<ContentControl.Template> 
    <ControlTemplate TargetType="local:Popup"> 
     <Grid Background="#7f000000"> 
      <Grid Background="White" HorizontalAlignment="Center" VerticalAlignment="Center"> 
       <StackPanel Margin="20"> 
        <TextBlock Text="{Binding Title, ElementName=popup}" FontSize="20" /> 
        <ContentPresenter /> 
       </StackPanel> 
      </Grid> 
     </Grid> 
    </ControlTemplate> 
</ContentControl.Template> 

Popup1.xaml.cs。

public partial class Popup : ContentControl 
{ 
    public static DependencyProperty TitleProperty = DependencyProperty.Register(nameof(Title), typeof(string), typeof(Popup)); 
    public string Title 
    { 
     get 
     { 
      return (string)GetValue(TitleProperty); 
     } 
     set 
     { 
      SetValue(TitleProperty, value); 
     } 
    } 

    public Popup() 
    { 
     InitializeComponent(); 
    } 
} 

}

Window1.xaml:

<local:Popup Title="Title..."> 
    <TextBlock>Text...</TextBlock> 
</local:Popup> 
+0

的''做了所有的特技。謝謝! +1 – bytecode77