WPF Popup作为用xaml编写的单独控件

时间:2015-01-30 19:07:36

标签: c# .net wpf xaml popup

是否有可能将WPF Popup创建为单独的控件,因此它不在窗口或用户控件中?

我有一个用XAML编写的弹出窗口:

<Popup PopupAnimation="Fade" Name="MyPopup" MinWidth="200" MinHeight="100" Width="200" Height="100" Placement="Center" VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="True" IsOpen="False">
        <Grid Width="Auto" Height="Auto" Background="Gray">
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Border BorderThickness="2" CornerRadius="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.RowSpan="2">
                <Border.BorderBrush>
                    <SolidColorBrush Color="Gray"/>
                </Border.BorderBrush>
                <Border.Background>
                    <SolidColorBrush Color="White"/>
                </Border.Background>
            </Border>

            <StackPanel Grid.Row="0">
                <Label Foreground="Blue" Content="Popup_Title"/>
            </StackPanel>

            <GroupBox Grid.Row="1" Header="Popup example content">
                <StackPanel>

                </StackPanel>
            </GroupBox>
        </Grid>
    </Popup>

现在,点击我的其他控件的按钮,我想做这样的事情:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        PopupControl p = new PopupControl();
        p.IsOpen = true; 
    }

通过查看UserControl或Window的示例,我知道我需要将此弹出窗口与实际的c#类连接,如:

public partial class PopupControl : Popup
{
    public PopupControl()
    {
        InitializeComponent();
    }
}

然后在Popup的XAML添加类中:

X:CLASS =&#34; WpfApplication1.PopupControl&#34 ;.

但有两件事:

1)对于PopUp

,没有x:Class这样的东西

2)从Popup派生不会有InitializeComponent();方法

1 个答案:

答案 0 :(得分:4)

你几乎做对了。在您自己的XAML文件中复制粘贴Popup代码时,您没有添加包含附加属性x的必要x:Class命名空间:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

只要将其添加到根元素(弹出窗口),就可以添加x:Class="WpfApplication1.PopupControl"。这将导致在obj文件夹中生成包含您缺少的InitializeComponent方法的部分类。

最简单的方法是

  1. 从“添加项目”对话框中创建新的UserControl
  2. 然后,将根元素从UserControl重命名为Popup
  3. 最后,从课程背后的代码中,只需删除: UserControl