2

我不确定我是否使用了正确的方法,所以我尝试在这里描述我的情况。请帮忙指出细节。

我的目的是自定义 WPFPopup类并实现特定的弹出面板。我使用 CustomControl 来实现它,如下所示:

这里是Generic.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication3">

    <Style TargetType="{x:Type local:CCPopup}">
        <Setter Property="AllowsTransparency" Value="True" />
        <Setter Property="StaysOpen" Value="False" />
        <Setter Property="Placement" Value="Center" />
        <Setter Property="Child">
            <Setter.Value>
                <Border Background="Red"
                        Width="30"
                        Height="30" />
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

以下是代码,仅注册元样式信息:

public class CCPopup : Popup
{
    static CCPopup()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CCPopup), new FrameworkPropertyMetadata(typeof(CCPopup)));
    }
}

到目前为止我遇到的问题可以总结如下:

1)我试着写:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication3">

    <Style TargetType="{x:Type local:CCPopup}"  BasedOn="{StaticResource {x:Type Popup}}">
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="StaysOpen" Value="False" />
        <Setter Property="Placement" Value="Center" />
        <Setter Property="Child">
            <Setter.Value>
                <Border Background="Red"
                        Width="30"
                        Height="30" />
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

但这不起作用,我得到错误{x:Type Popup}无法解决。为什么?

关于我的 MainWindow.xaml:我只添加<CCPopup x:Key="popup" />它的资源并创建一个按钮,当我单击按钮时,我将弹出窗口绑定PlacementTarget到此按钮并IsOpen在代码中将弹出窗口的属性设置为 true。

2)当我在代码中创建CCPopup的实例时CCPopup p = new CCPopup(),有些Style不起作用,比如AllowsTransparencyand StaysOpen,不会设置成我在xaml Style中给的值。但是当我从 xaml 创建一个实例<CCPopup x:Key="popup" />并从代码中的资源中引用它时,该样式可以正常工作。你能指出我哪里做错了吗?

3)只是好奇为什么Popup类没有Template财产?

谢谢你的帮助。

4

0 回答 0