为什么Style在WPF中不能正常使用Popup?

时间:2013-03-14 15:04:29

标签: wpf xaml popup styles

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

我的目的是自定义WPF Popup类并实现特定的弹出面板。我使用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绑定到此按钮并设置弹出窗口{{1}在代码中将属性设置为true。

2)当我在代码中创建CCPopup实例时,例如IsOpen,某些Style不起作用,例如CCPopup p = new CCPopup()AllowsTransparency,将不会被设置我在xaml Style中给出的值。但是当我从xaml StaysOpen创建一个实例并从代码中的资源引用它时,样式正常工作。你能指出我犯了哪个错误吗?

3)好奇为什么<CCPopup x:Key="popup" />班级没有Popup属性?

感谢您的帮助。

0 个答案:

没有答案