正しい方法を使用していないかどうかわからないので、ここで私のケースを説明しようと思います。詳細を指摘するのを手伝ってください。
私の目的は、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()一部のスタイルが機能せず、 xamlスタイルで指定した値に設定されません。しかし、xamlからインスタンスを作成し、コード内のリソースからインスタンスを参照すると、スタイルは正しく機能します。私がどこを間違えたのか指摘できますか?AllowsTransparencyStaysOpen<CCPopup x:Key="popup" />
Popup3)クラスにプロパティがない理由に興味がありTemplateますか?
ご協力いただきありがとうございます。